示例#1
0
        public virtual async Task PublishAsync(IAsyncEvent e, CancellationToken cancellationToken)
        {
            var eventType   = e.GetType();
            var handlerType = typeof(IAsyncEventHandler <>).MakeGenericType(e.GetType());
            var handleAsync = (InvokeHandleAsync)_eventHandlerInvokers.GetOrAdd(handlerType, t => CreateHandlerInvoker <InvokeHandleAsync>(eventType, handlerType, "HandleAsync", Expression.Parameter(typeof(CancellationToken), "token")));

            foreach (var obj in GetInstances(handlerType))
            {
                await handleAsync(obj, e, cancellationToken);

                if (cancellationToken.IsCancellationRequested)
                {
                    return;
                }
            }
        }