Есть ли разница между объявлением event Action<> и event EventHandler<>.
Предполагая, что не имеет значения, какой объект действительно вызвал событие.
например:
public event Action<bool, int, Blah> DiagnosticsEvent;
против
public event EventHandler<DiagnosticsArgs> DiagnosticsEvent;
class DiagnosticsArgs : EventArgs
{
    public DiagnosticsArgs(bool b, int i, Blah bl)
    {...}
    ...
}
В обоих случаях использование будет почти одинаковым:
obj.DiagnosticsEvent += HandleDiagnosticsEvent;
Есть несколько вещей, которые мне не нравятся в шаблоне event EventHandler<>:
- Объявление дополнительного типа, полученное из EventArgs
 - Принудительное прохождение источника объекта - часто никто не заботится
 
Дополнительный код означает больше кода для поддержки без каких-либо явных преимуществ.
В результате я предпочитаю event Action<>
Однако, только если в Action < > слишком много аргументов типа, тогда потребуется дополнительный класс.