gpt4 book ai didi

c# - 在 C# 中将 void 转换为异步返回

转载 作者:太空狗 更新时间:2023-10-30 00:30:52 25 4
gpt4 key购买 nike

我读到从 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com