请参见下面的代码:
public class CreatePersonHandler
: IRequestHandler<CreatePersonCommand,bool>
{
public async Task<bool> Handle(CreatePersonCommand message, CancellationToken cancellationToken)
{
return true;
}
}
它按预期工作,即到达hander并返回true。我该如何处理处理程序什么也不返回的情况?我要这样做:
public async void Handle(CreatePersonCommand message, CancellationToken cancellationToken)
{
//don't return anything
}
最近两个小时,我一直在使用Google搜索。例如,我看过这里:Register a MediatR pipeline with void/Task response和这里:https://github.com/jbogard/MediatR/issues/230。
答案 0 :(得分:4)
通常来说,如果基于任务的方法不返回任何内容,则可以返回completed Task
public Task Handle(CreatePersonCommand message, CancellationToken cancellationToken)
{
return Task.CompletedTask;
}
现在,以MediatR术语返回的值需要。如果没有值,则可以使用Unit
:
public Task<Unit> Handle(CreatePersonCommand message, CancellationToken cancellationToken)
{
return Task.FromResult(Unit.Value);
}
或者,如果某些地方有异步代码
public async Task<Unit> Handle(CreatePersonCommand message, CancellationToken cancellationToken)
{
await Task.Delay(100);
return Unit.Value;
}
该类签名应为:
public class CreatePersonHandler : IRequestHandler<CreatePersonCommand>
简写
public class CreatePersonHandler : IRequestHandler<CreatePersonCommand, Unit>
答案 1 :(得分:2)
针对任何由于某种原因不想使用Unit的人的解决方法。您可以创建名为VoidResult或EmptyResult的类,然后将其用作所有不返回任何请求的返回。
public class CreatePersonHandler : IRequestHandler<CreatePersonCommand, VoidResult>