【发布时间】:2016-10-24 23:43:48
【问题描述】:
我每次都会发生一些事件通知,例如将文件添加到文件夹中(这不是我的情况,只是一个类比来解释)。
文件夹中可以添加任意数量的文件,我们不知道会有多少。
目前,每次添加文件时都会触发我的事件 myEvent_Handler
private void myEvent_Handler(object sender, SomeEvent e)
{
// I dont know how many times this event will fire
if (something == true) (1)
{
var t = Task.Run(() =>
{
DoSomething(e); (2)
});
}
}
上述事件处理程序中的问题是标有 (1) 和 (2) 的竞态条件。例如,该事件被触发 4 次:
- (1) 为真,(2) 在任务中排队运行
- (1) 为真,(2) 在任务中排队运行
- (1) 为真,(2) 在任务中排队运行
- (1) 为真,(2) 在任务中排队运行
现在,任务队列有 4 个任务要运行,但这些任务的执行顺序不同。它们可以按任何顺序执行,即 3->2->4->1 但我需要它们按 1->2->3->4 执行而不阻塞 UI 线程。
如何在不阻塞 UI 线程的情况下实现这一点?
【问题讨论】:
-
听起来像是任务队列
-
听起来您可以将长时间运行的任务与队列一起使用。请参阅此解决方案:stackoverflow.com/questions/2293976/…
-
谢谢,但我最大的问题是,到目前为止,我所读到的所有内容都要求客户知道何时标记加载队列的结束,而我无法解决如何做到这一点为我的场景工作。
-
使用ContinueWith方法链接多个任务。