C# 异步作为方法结果管理器?
:C# 异步作为方法结果管理器?,c#,async-await,C#,Async Await,: “async”关键字启用该方法中的“wait”关键字和 更改处理方法结果的方式。这就是所有的async关键字 是的 第二部分让我很感兴趣,但我没有在文章中找到对此的解释 做一个小测试(注意-这里没有等待的任务): 将产生: 什么也没说: 如果async关键字修改的方法不包含等待 表达式或语句,则该方法同步执行。编译程序 警告提醒您任何不包含wait的异步方法, 因为这种情况可能表明有错误 问题 如果是这样,那么还有什么词是async使我的代码产生不同结果的呢 async方法捕获所有异常,不
“async”
关键字启用该方法中的“wait”关键字和
更改处理方法结果的方式。这就是所有的async关键字
是的
第二部分让我很感兴趣,但我没有在文章中找到对此的解释
做一个小测试(注意-这里没有等待的任务):
将产生:
什么也没说:
如果async关键字修改的方法不包含等待
表达式或语句,则该方法同步执行。编译程序
警告提醒您任何不包含wait的异步方法,
因为这种情况可能表明有错误
问题
如果是这样,那么还有什么词是
async
使我的代码产生不同结果的呢 async
方法捕获所有异常,不向方法的调用方抛出它们,而是将它们包含在从方法返回的任务中,将其标记为有故障的任务。如果该方法是async void
,则会在应用程序级别抛出错误,正如您所看到的,因为无法通过任务观察异常
,我也不确定为什么它会被否决。在我看来,这是一个很好的问题。斯泰芬·克利里的新文章详细介绍了异常。这在低质量队列中得到了体现。我不明白为什么,但结果是审计。所以不准确。结合使用void,它会在应用程序级别引发异常。它不仅允许等待keyword@RoyiNamir不,那没有错。该引用特别提到它改变了方法结果的处理方式,在本例中,改变了异常的传播方式。@Servy Yes。我没有读第二部分。对不起,谢谢:-)
static void X()
{
try
{
Y();
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
static async void Y() //<---- notice here
{
throw new NotImplementedException();
}
static void Main(string[] args)
{
X();
Console.ReadLine();
}
static async void Y()
{
throw new NotImplementedException();
}