Skip to content

Commit 0d3bf4c

Browse files
authored
Merge pull request #1058 from zachpainter77/timeout-behavior-support
Timeout behavior support
2 parents 69b54c8 + 0d5ef88 commit 0d3bf4c

File tree

3 files changed

+278
-201
lines changed

3 files changed

+278
-201
lines changed

src/MediatR/IPipelineBehavior.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ namespace MediatR;
99
/// </summary>
1010
/// <typeparam name="TResponse">Response type</typeparam>
1111
/// <returns>Awaitable task returning a <typeparamref name="TResponse"/></returns>
12-
public delegate Task<TResponse> RequestHandlerDelegate<TResponse>();
12+
public delegate Task<TResponse> RequestHandlerDelegate<TResponse>(CancellationToken t = default);
1313

1414
/// <summary>
1515
/// Pipeline behavior to surround the inner handler.

src/MediatR/Wrappers/RequestHandlerWrapper.cs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -34,14 +34,14 @@ public class RequestHandlerWrapperImpl<TRequest, TResponse> : RequestHandlerWrap
3434
public override Task<TResponse> Handle(IRequest<TResponse> request, IServiceProvider serviceProvider,
3535
CancellationToken cancellationToken)
3636
{
37-
Task<TResponse> Handler() => serviceProvider.GetRequiredService<IRequestHandler<TRequest, TResponse>>()
38-
.Handle((TRequest) request, cancellationToken);
37+
Task<TResponse> Handler(CancellationToken t = default) => serviceProvider.GetRequiredService<IRequestHandler<TRequest, TResponse>>()
38+
.Handle((TRequest) request, t == default ? cancellationToken : t);
3939

4040
return serviceProvider
4141
.GetServices<IPipelineBehavior<TRequest, TResponse>>()
4242
.Reverse()
4343
.Aggregate((RequestHandlerDelegate<TResponse>) Handler,
44-
(next, pipeline) => () => pipeline.Handle((TRequest) request, next, cancellationToken))();
44+
(next, pipeline) => (t) => pipeline.Handle((TRequest) request, next, t == default ? cancellationToken : t))();
4545
}
4646
}
4747

@@ -55,10 +55,10 @@ public class RequestHandlerWrapperImpl<TRequest> : RequestHandlerWrapper
5555
public override Task<Unit> Handle(IRequest request, IServiceProvider serviceProvider,
5656
CancellationToken cancellationToken)
5757
{
58-
async Task<Unit> Handler()
58+
async Task<Unit> Handler(CancellationToken t = default)
5959
{
6060
await serviceProvider.GetRequiredService<IRequestHandler<TRequest>>()
61-
.Handle((TRequest) request, cancellationToken);
61+
.Handle((TRequest) request, t == default ? cancellationToken : t);
6262

6363
return Unit.Value;
6464
}
@@ -67,6 +67,6 @@ await serviceProvider.GetRequiredService<IRequestHandler<TRequest>>()
6767
.GetServices<IPipelineBehavior<TRequest, Unit>>()
6868
.Reverse()
6969
.Aggregate((RequestHandlerDelegate<Unit>) Handler,
70-
(next, pipeline) => () => pipeline.Handle((TRequest) request, next, cancellationToken))();
70+
(next, pipeline) => (t) => pipeline.Handle((TRequest) request, next, t == default ? cancellationToken : t))();
7171
}
7272
}

0 commit comments

Comments
 (0)