Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/30.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何获取任务中返回的整数值<;int>;格式-Asp.net核心MVC-MediaTr_Asp.net_Asp.net Mvc_Asp.net Core_Mediatr - Fatal编程技术网

如何获取任务中返回的整数值<;int>;格式-Asp.net核心MVC-MediaTr

如何获取任务中返回的整数值<;int>;格式-Asp.net核心MVC-MediaTr,asp.net,asp.net-mvc,asp.net-core,mediatr,Asp.net,Asp.net Mvc,Asp.net Core,Mediatr,将记录保存到数据库后,我需要获取将从域层返回的Id。为此,我使用了MediaTr库的功能 public class PessoaCommandHandler : CommandHandler, IRequestHandler<RegisterNewPessoaCommand, int>, IRequestHandler<UpdatePessoaCommand, int>, IRequestHandler<RemovePessoaCommand

将记录保存到数据库后,我需要获取将从域层返回的Id。为此,我使用了MediaTr库的功能

public class PessoaCommandHandler : CommandHandler,
    IRequestHandler<RegisterNewPessoaCommand, int>,
    IRequestHandler<UpdatePessoaCommand, int>,
    IRequestHandler<RemovePessoaCommand, int>
{
    private readonly IPessoaRepository _pessoaRepository;
    private bool _allowEndTransaction;
    private readonly IMediatorHandler Bus;

    public PessoaCommandHandler(IPessoaRepository pessoaRepository,
                                  IUnitOfWork uow,
                                  IMediatorHandler bus,
                                  INotificationHandler<DomainNotification> notifications) : base(uow, bus, notifications)
    {
        _pessoaRepository = pessoaRepository;
        _allowEndTransaction = true;
        Bus = bus;
    }

    public Task<int> Handle(RegisterNewPessoaCommand message, CancellationToken cancellationToken)
    {
        if (!message.IsValid())
        {
            NotifyValidationErrors(message);
            return Task.FromResult(0);
        }

         var pessoaModel = new Pessoa(message.PessoaNatureza);
         _pessoaRepository.Add(pessoaModel);

        return Task.FromResult(pessoaModel.Id);

    }
}
公共类PessoaCommandHandler:CommandHandler,
IRequestHandler,
IRequestHandler,
IRequestHandler
{
私人只读IPESSOareposatory存储库;
私人买卖;
专用只读IMediatorHandler总线;
公共PESSOACOMMANDHANDLENDER(IPESSOAREPOSOAREPOSITORY pessoaRepository,
I工作单元uow,
IMediatorHandler总线,
INotificationHandler通知):基本(uow、总线、通知)
{
_pessoaRepository=pessoaRepository;
_allowEndTransaction=true;
总线=总线;
}
公共任务句柄(RegisterNewPessoaCommand消息,CancellationToken CancellationToken)
{
如果(!message.IsValid())
{
NotifyValidationErrors(消息);
返回Task.FromResult(0);
}
var pessoaModel=new Pessoa(message.PessoaNatureza);
_pessoaRepository.Add(pessoaModel);
返回Task.FromResult(pessoaModel.Id);
}
}
现在,让我们来讨论问题: 我需要获取“Result”属性中的整数值,并将其放入personId变量中,但我不知道如何做到这一点。有人知道怎么做吗

public void Register(PessoaViewModel pessoaViewModel)
{
    var registerCommand = _mapper.Map<RegisterNewPessoaCommand>(pessoaViewModel);
    var pessoaId = Bus.SendCommand(registerCommand);
}
公共无效寄存器(PessoaViewModel PessoaViewModel)
{
var registerCommand=_mapper.Map(pessoaViewModel);
var pessoaId=Bus.SendCommand(寄存器命令);
}

打开
任务返回的值的最简单方法可能是使用
异步
/
等待

尽管如此,您还是希望尽量避免使用
async void
方法,因为这会导致一个无法等待的“fire-and-forget”方法(这可能会变成一场调试噩梦,因为任何异常都会丢失到void中,等等)——因此让Register方法返回一个
任务来代替:

异步公共任务寄存器(PessoaViewModel PessoaViewModel) { var registerCommand=_mapper.Map(pessoaViewModel); var pessoaId=等待总线发送命令(寄存器命令); //根据需要使用“pessoaId” }
如果由于某种原因,
async
/
await
不可用,也可以使用以下选项(但请注意,此选项是同步的,将阻止当前线程执行等):

公共无效寄存器(PessoaViewModel PessoaViewModel)
{
var registerCommand=_mapper.Map(pessoaViewModel);
var pessoaId=Bus.SendCommand(registerCommand.GetAwaiter().GetResult();
//根据需要使用“pessoaId”
}
为了完整起见,我要补充的是,还可以使用
Bus.SendCommand(registerCommand.Result)但这通常被认为是不好的做法,因为它会混淆聚合异常中的任何异常,等等

另外,对于一个类似的问题,也就是如何展开的问题,给出了可靠的答案