【发布时间】:2014-03-26 13:05:37
【问题描述】:
我需要按顺序处理任务。所以这个类订阅了一些事件。
处理事件时,必须将异步方法添加到队列中,并且可能在之前的所有任务完成后执行。此时实现如下:
但是ProccessTasks 方法在第一个事件引发时停止工作。
public class class view
{
private void ModelUpdatedEventHandler(object sender, EventArgs args)
{
taskQueue.Enqueue(new Task(() => Invalidate()));
}
private void MoveCubesEventHandler(object sender, MoveCheckerEventArgs args)
{
taskQueue.Enqueue(new Task(() => MoveCube(args.Move)));
}
private async Task Invalidate()
{
//code here
}
public async Task MoveChecker(Move move)
{
//code here
}
private async Task ProccessTasks()
{
while (true)
{
while (taskQueue.Count > 0)
{
Task task = taskQueue.Dequeue();
await task;
}
}
}
private async void UserControl_Loaded_1(object sender, RoutedEventArgs e)
{
await Task.Run(() => ProccessTasks());
}
}
【问题讨论】:
-
看看BlockingCollection:msdn.microsoft.com/en-us/library/dd267312(v=vs.110).aspx
-
...或者更好的是,TPL 数据流:msdn.microsoft.com/en-us/library/hh228603%28v=vs.110%29.aspx 它对我来说效果很好:*.com/questions/7863573/…
-
@spender 所以,我
m writing The app for Windows RT, it hasnt System.Threading.Tasks.Dataflow -
根据NuGet listing,.NET for Windows Store 应用程序应该支持 Dataflow。您是否真的尝试使用 NuGet 将其添加到您的项目中?
标签: c# windows-store-apps scheduled-tasks async-await