public async Task <Response> HandleAsync(TRequest request) { using (var cts = new CancellationTokenSource()) { var token = cts.Token; foreach (var requestHook in _requestConfig.GetRequestHooks()) { await requestHook.Run(request, token).Configure(); token.ThrowIfCancellationRequested(); } return(await _decorateeFactory().HandleAsync(request)); } }
internal static async Task RunRequestHooks(this ICrudRequest request, ICrudRequestConfig config, CancellationToken ct) { var hooks = config.GetRequestHooks(); foreach (var hook in hooks) { try { await hook.Run(request, ct).Configure(); ct.ThrowIfCancellationRequested(); } catch (Exception e) when(IsNonCancellationFailure(e)) { throw new CrudHookFailedException(GenericHookError("request"), e) { HookProperty = hook }; } } }