【发布时间】:2016-01-15 19:42:59
【问题描述】:
您好,我想知道是否有类似于 await 语句的东西,它用于任务,我可以在 c# 中使用线程来实现?
我想做的是:
启动线程 A,计算一些数据并将结果放入变量x。
在该变量 x 被转移到另一个线程 B 之后,同时
线程 A 再次开始计算一些数据,而线程 B 开始另一个计算,结果为 x。
更新:好的,似乎有些混乱,所以我的描述会更准确:
我使用两个产生数据的传感器。需要以这样一种方式检索数据,即检索 SensorA 数据(这需要很长时间),然后必须立即在另一个线程中检索来自 SensorB 的数据,同时 SensorA 继续检索另一个数据块。问题是我无法将两个传感器的数据排列在同一个队列中,但我需要将两个传感器的数据存储在一个数据结构/对象中。
我的想法是这样的:
- 从线程 A 中的传感器 A 获取数据。
- 将结果交给线程 B 并重新启动线程 A。
- 当线程 A 再次运行时,线程 B 从传感器 B 获取数据并计算来自传感器 A 和 B 的数据
你可以假设线程 A 总是比线程 B 需要更长的时间
【问题讨论】:
-
不清楚您希望
await做什么...毕竟,您不是在等待线程执行完成。也许您应该通过线程 A 知道的TaskCompletionSource为x使用Task<T>?然后线程 B 可以等待该任务。不过,您可能想查看 Dataflow:msdn.microsoft.com/en-us/library/hh228603(v=vs.110).aspx -
听起来像经典的生产者/消费者。
-
对我来说听起来像 TPL DataFlow :-)
-
@MatthewWatson 谁说该线程已被弃用?
-
@VMAtm 我故意夸大效果。我们不应该在没有充分理由的情况下使用线程。
Task是一个更高级别的概念,它可能使用也可能不使用实际线程。 (换句话说,线程是一个实现细节。)
标签: c# multithreading async-await