栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

捕获异步void方法引发的异常

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

捕获异步void方法引发的异常

阅读起来有点奇怪,但是可以,该异常会冒泡到调用代码中-但仅 当您

await
Wait()
对的调用
Foo
时才 如此

public async Task Foo(){    var x = await DoSomethingAsync();}public async void DoFoo(){    try    {        await Foo();    }    catch (ProtocolException ex)    {          // The exception will be caught because you've awaited          // the call in an async method.    }}//or//public void DoFoo(){    try    {        Foo().Wait();    }    catch (ProtocolException ex)    {              }}

异步void方法具有不同的错误处理语义。从异步Task或异步Task方法抛出异常时,将捕获该异常并将其放置在Task对象上。使用异步void方法时,没有Task对象,因此从异步void方法抛出的任何异常都将直接在启动异步void方法时处于活动状态的SynchronizationContext上引发。-
https://msdn.microsoft.com/en-
us/magazine/jj991977.aspx

请注意,如果.Net决定同步执行方法,则使用Wait()可能会导致应用程序阻塞。

这个说明http://www.interact-sw.co.uk/iangblog/2010/11/01/csharp5-async-
exceptions
非常好-它讨论了编译器为实现此魔术而采取的步骤。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/442827.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号