我读到从 C# async
调用返回 void
不好。但我有以下情况:
public async void MainFunction()
{
await DoSomething()
await DoSomethingMore()
}
public void DoSomething()
{
//some code that I want to execute (fire and forget)
}
public void DoSomethingMore()
{
//some code that I want to execute (fire and forget)
}
因为我只想执行该函数而根本不返回。我应该保持这样,还是应该从 DoSomething() 返回 Task
?如果我把它改为返回 Task,因为我的代码根本不需要返回任何东西,我应该返回什么?
最佳答案
If i change it to return Task, since my code need return nothing at all, what should i return?
您当前的代码无法编译,因为您不能在 void
返回方法上 await
(因为它不返回可等待的类型它公开了一个 GetAwaiter
方法)。
同步世界中的任何void
方法都应该在异步世界中返回一个Task
。这允许任何希望异步等待异步操作的人,也有机会正确处理异常。使用 async void
意味着异常将被吞噬,或者如果在配置中设置为,将在任意线程池线程上重新抛出。异步应该一直正确传播。
请注意,当您在 MainFunctionAsync
中等待这两个操作时,您并不是先发后遗,而是异步等待每个操作按顺序完成。
public async Task MainFunctionAsync()
{
await DoSomethingAsync();
await DoSomethingMoreAsync();
}
public Task DoSomethingAsync()
{
// Do meaningful async stuff
}
public Task DoSomethingMoreAsync()
{
// Do more meaningful async stuff
}
关于c# - 在 C# 中将 void 转换为异步返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32332164/