我一直在看this article关于在 C# 中使用任务,如果有人可以为我解决问题,我正在徘徊?
不在任务上调用等待会破坏创建任务的目的,因为它不会卡住主线程,因为现在主线程必须等待任务完成。
但是我假设 wait 不会立即被调用,所以现在你什么时候调用它或者你怎么知道什么时候处理任务。
假设我们有一个像这样的简单案例:
void MyFunction()
{
Task t = Task.Factory.StartNew(() => { System.Threading.Thread.Sleep(5000); });
}
如果你直接调用 t.Wait() 主线程仍然会等待 5 秒才能做其他事情,从用户的角度来看这有点违背了目的,他们将无法在 5 秒内做任何事情秒。你怎么知道 5 秒后任务已经完成?你可以处理 t?什么是正确的处理方法?
对不起,如果这个问题真的很幼稚:(
谢谢大家:D
最佳答案
您可能永远不会从 UI 线程对这样的单个任务调用 Wait
- 正如您所说的那样,重点是不会阻塞 UI 线程。事实上,从 UI 线程等待任何任务都是一个问题。
不过,等待任务完成可能有助于同步多个任务并返回组合结果 - 例如假设有两个任务同时在 priceline 和 expedia 上执行酒店查询,并且生成这两个任务的线程(例如后台线程)等待这两个任务的结果并将结果合并以按价格对两个站点上的可用酒店进行排序。
然后可以将查询的最终结果分派(dispatch)回 UI 线程,通常是通过执行回调或引发事件。
关于C# 等待和处理任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9561485/