使用异步 void 方法运行长寿命操作
本文关键字:操作 运行 方法 异步 void | 更新日期: 2023-09-27 18:30:34
使用async void
方法启动一些长寿命的操作是否合适?我知道Nito或Task.Run()
可用于从非异步方法运行任务。有什么区别?有什么陷阱吗?
我的意思是,我可以这样写吗:
async void bar()
{
try
{
//...
}
catch (Exception ex)
{
// no rethrowing here
}
}
void foo()
{
bar();
// will continue right after 1st await in bar()
baz();
}
在任何情况下,最好使用 async Task
来获得更好的错误处理行为。您无需等待结果任务。
在代码片段中,注释will continue right after 1st await in bar
不一定正确。就目前而言bar
将同步执行并阻止foo
bar
因为其中没有等待。
启动长时间运行的操作需要使用异步 IO 或以某种方式使用新线程/任务(Task.Run
是合适的)。