gpt4 book ai didi

c# - Task.Run() 中的异步/等待操作

转载 作者:太空狗 更新时间:2023-10-29 17:45:52 29 4
gpt4 key购买 nike

Task.Run(()=>{})将 Action 委托(delegate)放入队列并返回任务。在 Task.Run() 中使用 async/await 有什么好处吗? ?我明白 Task.Run()是必需的,因为如果我们想直接使用 await,那么调用方法将需要异步,并且会影响调用位置。

这是在 Task.Run() 中有异步等待的示例代码.此处提供了完整示例:Create pre-computed tasks .

Task.Run(async () => { await new WebClient().DownloadStringTaskAsync("");});

或者这也可以这样做:

Task.Run(() => new WebClient().DownloadStringTaskAsync("").Result;);

因为两者,Task.Run()和 Await 将工作排队并由线程池选择,Task.Run() 中的异步/等待是否可以?有点多余?

最佳答案

Is there any benefit of having async/await within the Task.Run() ?

是的。 Task.Run 在线程池线程上运行一些操作。如果此类操作执行一些 IO 工作并通过 await 异步等待 IO 操作完成,则系统可以在 IO 操作仍在运行时使用此线程池线程进行其他工作。

例子:

Task.Run( async () =>
{
DoSomeCPUIntensiveWork();

// While asynchronously waiting for this to complete,
// the thread is given back to the thread-pool
var io_result = await DoSomeIOOperation();

DoSomeOtherCPUIntensiveWork(io_result);
});

关于c# - Task.Run() 中的异步/等待操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34755819/

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