public static Task InvokeAsync <T1, T2>(this AsyncEvent <T1, T2> asyncEvent, T1 arg1, T2 arg2) { if (asyncEvent == null) { return(Task.CompletedTask); } var events = asyncEvent.GetInvocationList().Cast <AsyncEvent <T1, T2> >(); var eventTasks = events.Select(it => it.Invoke(arg1, arg2)); return(Task.WhenAll(eventTasks)); }
public static Task InvokeAsync <T1, T2, T3>(this AsyncEvent <T1, T2, T3> asyncEvent, T1 arg1, T2 arg2, T3 arg3) { if (asyncEvent == null) { return(Task.CompletedTask); } IEnumerable <AsyncEvent <T1, T2, T3> > events = asyncEvent.GetInvocationList().Cast <AsyncEvent <T1, T2, T3> >(); IEnumerable <Task> eventTasks = events.Select(it => it.Invoke(arg1, arg2, arg3)); return(Task.WhenAll(eventTasks)); }
public static Task InvokeAsync(this AsyncEvent asyncEvent) { if (asyncEvent == null) { return(Task.CompletedTask); } var events = asyncEvent.GetInvocationList().Cast <AsyncEvent>(); var eventTasks = events.Select(it => it.Invoke()); return(Task.WhenAll(eventTasks)); }
public static async Task InvokeAsync(this AsyncEvent handler, object source, EventArgs args) { if (handler is null) { return; } var invocations = handler.GetInvocationList(); for (var i = 0; i < invocations.Length; i++) { await((AsyncEvent)invocations[i])(source, args).ConfigureAwait(false); } }
/// <summary>Raises an async event. </summary> /// <typeparam name="T">Event args type.</typeparam> /// <param name="asyncEvent">The event instance. </param> /// <param name="source">The event source.</param> /// <param name="args">EventArgs object.</param> /// <param name="wait">Optional. If True, method awaits all handlers.</param> /// <returns>Awaitable task.</returns> public async static Task RaiseAsync <T>(this AsyncEvent <T> asyncEvent, object source, T args, bool wait = true) where T : EventArgs { var handlers = asyncEvent.GetInvocationList(); var tasks = new List <Task>(); foreach (var handler in handlers) { var typedHandler = (AsyncEvent <T>)handler; var task = typedHandler(source, args); if (task != null) //handler can return null { tasks.Add(task); } } if (wait && tasks.Count > 0) { await Task.WhenAll(tasks); } }