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; } } }