gpt4 book ai didi

c# - 我什么时候使用 Task.Yield()?

转载 作者:IT王子 更新时间:2023-10-29 03:29:53 27 4
gpt4 key购买 nike

我经常使用 async/await 和 Task 但从未使用过 Task.Yield()老实说,即使有所有解释,我也不明白为什么我需要这种方法。

有人可以给出一个需要 Yield() 的好例子吗?

最佳答案

当您使用 async/await 时,无法保证您在执行 await FooAsync() 时调用的方法会实际运行异步地。内部实现可以使用完全同步的路径自由返回。

如果您正在制作一个 API,其中不阻塞是至关重要的并且您异步运行一些代码,并且被调用的方法有可能同步运行(有效阻塞),使用 await Task.Yield () 将强制您的方法是异步的,并在此时返回控制。其余代码将稍后在当前上下文中执行(此时,它仍可能同步运行)。

如果您创建一个需要一些“长时间运行”初始化的异步方法,这也很有用,即:

 private async void button_Click(object sender, EventArgs e)
{
await Task.Yield(); // Make us async right away

var data = ExecuteFooOnUIThread(); // This will run on the UI thread at some point later

await UseDataAsync(data);
}

如果没有 Task.Yield() 调用,该方法将一直同步执行,直到第一次调用 await

关于c# - 我什么时候使用 Task.Yield()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22645024/

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