编译器如何将异步方法的返回值转换为返回Task

2024-02-13

我设计了以下方法来创建记录。

public Task<Guid> NotAwaited()
{
  Account account = new Account();
  Context.Accounts.Add(account);
  Context.SaveChangesAsync();
  return new Task<Guid>(() => account.Id);
}

然后,我意识到返回指南时存在保存未完成的风险。所以我添加了await,这需要我用以下内容来装饰方法签名async。之后,我收到一个错误,要求对返回的内容使用更简单的语法,如下所示。

public async Task<Guid> Awaited()
{
  Account account = new Account();
  Context.Accounts.Add(account);
  await Context.SaveChangesAsync();
  return account.Id;
}

据我了解,account.Id部分以某种方式转换为任务。我只是不确定如何。感觉就像是黑魔法(我知道不是)。

是否存在隐式转换?或者我仍然不正确地执行异步调用?


你可以想到async将结果(返回值和异常)包装到Task<T>.

同样地,await解开结果(提取返回值或引发异常)。

我有一个async intro https://blog.stephencleary.com/2012/02/async-and-await.html这会更详细,我建议async最佳实践 https://msdn.microsoft.com/en-us/magazine/jj991977.aspx作为后续行动。顺便说一句,你永远不应该使用Task构造函数 https://blog.stephencleary.com/2014/05/a-tour-of-task-part-1-constructors.html.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

编译器如何将异步方法的返回值转换为返回Task? 的相关文章

随机推荐