public IAsyncEventHandler CreateHandler(Func <TArg, Task> handler, [CallerFilePath] string callerFile = null, [CallerLineNumber] int line = 0) { if (handler == null) { throw new ArgumentNullException(nameof(handler)); } lock (Handlers) { RemoveHandler(handler); var result = new AsyncEventTaskHandler <TArg> { Action = handler, Event = this, Caller = Debugger.IsAttached ? $"{callerFile}:{line}" : string.Empty }; Handlers.Add(result); return(result); } }
/// <summary> /// Creates an event handler which you can dispose of explicitly if required. /// </summary> public static IAsyncEventHandler CreateHandler <TEvent>(this TEvent @event, Func <Task> handler, [CallerFilePath] string callerFile = null, [CallerLineNumber] int line = 0) where TEvent : AbstractAsyncEvent { if (handler == null) { throw new ArgumentNullException(nameof(handler)); } lock (@event.Handlers) { @event.RemoveHandler(handler); var result = new AsyncEventTaskHandler { Action = handler, Event = @event, Caller = Debugger.IsAttached ? $"{callerFile}:{line}" : string.Empty }; @event.Handlers.Add(result); return(result); } }