请参见下面的代码:
public class CreatePersonHandler
: IRequestHandler<CreatePersonCommand,bool>
{
public async Task<bool> Handle(CreatePersonCommand message, CancellationToken cancellationToken)
{
return true;
}
}
Run Code Online (Sandbox Code Playgroud)
它按预期工作,即到达处理程序并返回true。我该如何处理处理程序什么也不返回的情况?我想做这个:
public async void Handle(CreatePersonCommand message, CancellationToken cancellationToken)
{
//don't return anything
}
Run Code Online (Sandbox Code Playgroud)
最近两个小时,我一直在使用Google搜索。例如,我看过这里:在void / Task响应中注册一个MediatR管道,在这里:https : //github.com/jbogard/MediatR/issues/230。
Kav*_*eri 18
在 中CreatePersonCommand,IRequest不应指定任何响应类型:
public record CreatePersonCommand : IRequest
Run Code Online (Sandbox Code Playgroud)
在 中PersonCommandHandler,IRequestHandler会是这样的:
public class PersonCommandHandler: IRequestHandler<PersonCommandHandler>
Run Code Online (Sandbox Code Playgroud)
然后在你的handle方法中:
public async Task<Unit> Handle(CreatePersonCommand request, CancellationToken cancellationToken)
{
// Some Code
return Unit.Value;
}
Run Code Online (Sandbox Code Playgroud)
Pet*_*ons 16
一般来说,如果基于任务的方法不返回任何内容,则可以返回已完成的任务
public Task Handle(CreatePersonCommand message, CancellationToken cancellationToken)
{
return Task.CompletedTask;
}
Run Code Online (Sandbox Code Playgroud)
现在,以MediatR术语来说,需要返回一个值。如果没有价值,您可以使用Unit:
public Task<Unit> Handle(CreatePersonCommand message, CancellationToken cancellationToken)
{
return Task.FromResult(Unit.Value);
}
Run Code Online (Sandbox Code Playgroud)
或者,如果某处有一些异步代码
public async Task<Unit> Handle(CreatePersonCommand message, CancellationToken cancellationToken)
{
await Task.Delay(100);
return Unit.Value;
}
Run Code Online (Sandbox Code Playgroud)
然后,类签名应为:
public class CreatePersonHandler : IRequestHandler<CreatePersonCommand>
Run Code Online (Sandbox Code Playgroud)
这是短的
public class CreatePersonHandler : IRequestHandler<CreatePersonCommand, Unit>
Run Code Online (Sandbox Code Playgroud)