如何等待Task.Run完成?

问题描述 投票:1回答:3

我有一个程序可以处理这样的事情

var t=Task.Run(()=>process());
while(!t.IsCompleted())
 Task.Delay(1000);
Console.WriteLine(t.Result);

有没有其他方法让程序等到Task被完成?

c# .net task .net-4.7
3个回答
5
投票

你在这里做的是 基本上 "sync over async"。该 错的 这里的修复方法是用... t.Wait() 而不是你的循环。然而,实际上,你应该尝试让这段代码成为 async,并使用代替。

Console.WriteLine(await t);

注意,你的 Main 在C#中的方法可以是 async static Task Main() 如果需要的话

但是!在这里。有 实在没啥意思 使用 Task.Run 在这里--这只是占用了一个池子里的线程,并阻止了当前的线程。等着呢. 你并没有得到任何东西,从 Task.Run!

  • 如果 process() 是同步的:只要使用 Console.WriteLine(process())
  • 如果 process() 是异步的(返回一个 Task<T>ValueTask<T>等):只需用 Console.WriteLine(await process())


0
投票

它会自动发生。你只需要。

var t=Task.Run(()=>process());

Console.WriteLine(t.Result);

如果... t.Result 一开始是不可用的,程序就会在这一点上阻塞,直到计算出数值。

也就是说,如果你只是想等待结果,为什么要把它作为一个任务来运行呢?

© www.soinside.com 2019 - 2024. All rights reserved.