gpt4 book ai didi

c# - 等待 Task.Run 与等待

转载 作者:可可西里 更新时间:2023-11-01 07:53:05 24 4
gpt4 key购买 nike

我在网上搜索过很多关于 Task.Run 和 await async 的问题,但是有一个具体的使用场景我不太明白其中的区别。我相信场景非常简单。

await Task.Run(() => LongProcess());

对比

await LongProcess());

LongProcess 是一个异步方法,其中包含一些异步调用,例如使用 await ExecuteReaderAsync() 调用 db。

问题:

在这个场景下两者有什么区别吗?感谢任何帮助或输入,谢谢!

最佳答案

Task.Run 可以将要处理的操作发布到不同的线程。这是唯一的区别。

这可能有用 - 例如,如果 LongProcess不是真正的异步,它会使调用者返回得更快。但是对于一个真正的异步方法,使用 Task.Run 是没有意义的。 ,并可能造成不必要的浪费。

不过要小心,因为 Task.Run 的行为将根据重载决议而改变。在您的示例中,Func<Task>将选择过载,这将(正确地)等待 LongProcess完成。但是,如果使用非任务返回委托(delegate),Task.Run只会等待执行到第一个 await (请注意,这就是 TaskFactory.StartNew始终 的行为方式,所以不要使用它)。

关于c# - 等待 Task.Run 与等待,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38739403/

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