C# 等待和处理任务

标签 c# task


我一直在看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/

相关文章:

c# - ASP.NET MVC 6 Controller 工厂

java - 将Python语法中的ANTLR4嵌入java转换为C#

c# - 更改 WPF DatePicker 文本框的外观

android - 应用程序总是从根 Activity 重新开始,而不是恢复后台状态(已知错误)

c# - 我怎样才能等待 Task.WhenAll( ... ).ContinueWith( AnotherAwaitable )?

c# - 如何捕获从延续抛出的未处理异常?

c# - RijndaelManaged 实例的用途?

c# - 需要让我的递归函数运行得更快

Android获取Google任务-API key方法

c# - Progress<T> 类和同步问题