private static Task InvokeHandlerAsync(EventHandlerDescriptor descriptor, EventHandlerRequest request, CancellationToken cancellationToken) { Contract.Requires(descriptor != null); Contract.Requires(request != null); IEventHandler handler = descriptor.CreateHandler(request); if (handler == null) { throw CreateHandlerNotFoundException(descriptor); } request.RegisterForDispose(handler, true); EventHandlerContext context = new EventHandlerContext(request, descriptor); context.Handler = handler; handler.EventContext = context; EventFilterGrouping filterGrouping = descriptor.GetFilterGrouping(); ServicesContainer servicesContainer = request.Configuration.Services; IEventHandlerResult result = new EventHandlerFilterResult(context, servicesContainer, filterGrouping.EventHandlerFilters); return(result.ExecuteAsync(cancellationToken)); }