gpt4 book ai didi

c# - IRequestHandler 返回 void

转载 作者:行者123 更新时间:2023-12-01 22:49:15 24 4
gpt4 key购买 nike

请参阅下面的代码:

public class CreatePersonHandler
: IRequestHandler<CreatePersonCommand,bool>
{
public async Task<bool> Handle(CreatePersonCommand message, CancellationToken cancellationToken)
{
return true;
}
}

它按预期工作,即到达处理程序并返回 true。如何处理处理程序不返回任何内容的情况?我想这样做:

public async void Handle(CreatePersonCommand message, CancellationToken cancellationToken)
{
//don't return anything
}

我花了两个小时在谷歌上搜索这个。例如,我在这里查看:Register a MediatR pipeline with void/Task response在这里:https://github.com/jbogard/MediatR/issues/230 .

最佳答案

一般来说,如果基于任务的方法不返回任何内容,您可以返回 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>

关于c# - IRequestHandler 返回 void,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54687705/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com