예제 #1
0
        /// <summary>
        /// Queues an AsyncEventHandler invocation to the SequenceTokenWorkDispatcher.
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="eventHandler">The event handler.</param>
        /// <param name="sender">The sender.</param>
        /// <param name="args">The arguments.</param>
        /// <param name="dispatcher">The dispatcher.</param>
        /// <param name="tokens">The tokens.</param>
        public static void RaiseQueued <T>(this AsyncEventHandler <T> eventHandler, object sender, T args, SequenceTaskScheduler dispatcher, params object[] tokens)
        {
            // queue a task that produces a
            var task = new Task <Task>(async() => { await eventHandler.RaiseAsync(sender, args); });

            dispatcher.EnqueueWorkAsync(task, tokens).ObserveExceptions();
        }