Пример #1
0
        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));
        }
Пример #2
0
        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));
        }
Пример #3
0
        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));
        }
Пример #4
0
        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);
            }
        }
Пример #5
0
        /// <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);
            }
        }