В качестве примера возьмем следующий код и опустим все подробности.
private void Example(Func<bool> exampleFunction)
{
bool result = exampleFunction(); // 1
result = exampleFunction.Invoke(); // 2
}
В чем различие между первым и вторым вызовом функции? Опишите ситуации в которых важно применять либо первый, либо второй вызов делегата.
На MSDN указано:
Вызывает метод или конструктор, представленный текущим экземпляром, используя указанные параметры.
На самом деле ваш объект exampleFunction имеет тип Func<bool>, его базовый тип MulticastDelegate, а у этого типа базовый тип Delegate (http://ideone.com/I99DiH).
Для потомков типа Delegate CLR предоставляет метод Invoke с сигнатурой, соответствующей объявлённой сигнатуре делегата. Из MSDN:
The common language runtime provides an Invoke method for each delegate type, with the same signature as the delegate. You do not have to call this method explicitly from C#, Visual Basic, or Visual C++, because the compilers call it automatically. The Invoke method is useful in reflection when you want to find the signature of the delegate type.
Это значит, что разницы нет, и обычно проще использовать просто вызов со скобками.
Несколько отдельных случаев, при которых Invoke имеет смысл использовать:
Invoke.Новый оператор ?.: вместо
if (exampleFunction != null)
exampleFunction();
можно написать более изящное
exampleFunction?.Invoke();
Сборка персонального компьютера от Artline: умный выбор для современных пользователей