【发布时间】:2013-10-18 04:55:34
【问题描述】:
问题
这可能是我错过的一些简单的事情。
假设我愿意(在 loveley VB 中):
Dim t1 As New Task(Sub() Debug.WriteLine("t1"))
Dim t2 As Task = t1.ContinueWith(Sub() Debug.WriteLine("t2"))
Dim t3 As Task = t1.ContinueWith(Sub() Debug.WriteLine("t3"))
t1.Start()
注意 t1.ContinueWith 被使用了两次。这些任务的首选执行顺序是什么?对我来说,要么是随机的,要么是错误的。
为什么?
我想这样做的原因...
- 创建一个获取和返回数据的任务
- 随后是一个“整理”
TaskScheduler.FromCurrentSynchronizationContext()(UI 线程)上的 UI 的任务 - 按照原始数据抓取任务,将数据转换为长报告(需要很长时间)
- 返回 UI 线程,将该报表分配给预览控件
- 清理(摆脱我的进度动画等)
由于第 4 步是可选的,这让事情变得更加复杂。
在这一切中,我的任务正在向后弯曲以设置成员属性,以便 UI 和任务可以很好地发挥作用。也许我应该完全放弃任务结果,只坚持同步我的成员变量。毕竟它们都只分配一次。
谢谢,汤姆
【问题讨论】:
-
等一下,它可能是一个堆栈。如果我执行 t3 然后 t2 它可以工作(无论如何,在我的代码中,我实际上并没有使用 t1 t2 t3 示例)......以错误的顺序添加它们感觉不对。也许我可以有一个延续任务列表,将其反转,然后 .ContinueWith(myreversedTask)
标签: .net task-parallel-library