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

异步/等待-什么时候返回Task vs void?

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

异步/等待-什么时候返回Task vs void?

1)通常,您需要返回

Task
。主要的例外应该是当您 需要
具有
void
返回类型(用于事件)时。如果没有理由不允许调用者执行
await
您的任务,为什么要禁止它呢?

2)

async
返回的方法
void
在另一方面是特殊的:它们代表 顶级异步操作
,并且在您的任务返回异常时会起作用。最简单的方法是通过一个示例来显示差异:

static async void f(){    await h();}static async Task g(){    await h();}static async Task h(){    throw new NotImplementedException();}private void button1_Click(object sender, EventArgs e){    f();}private void button2_Click(object sender, EventArgs e){    g();}private void button3_Click(object sender, EventArgs e){    GC.Collect();}

f
的例外始终是“遵守”。留下顶级异步方法的异常就像其他未处理的异常一样被对待。
g
从未观察到例外。当垃圾收集器清理任务时,它会看到任务导致异常,并且没有人处理该异常。发生这种情况时,
TaskScheduler.UnobservedTaskException
处理程序将运行。您绝对不要让这种情况发生。以您的示例为例,

public static async void AsyncMethod2(int num){    await Task.Factory.StartNew(() => Thread.Sleep(num));}

是的,请使用

async
await
在这里,它们可以确保如果引发异常,您的方法仍然可以正常工作。

有关更多信息,请参见:http :
//msdn.microsoft.com/zh-
cn/magazine/jj991977.aspx



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

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

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