작업을 순서대로 처리해야합니다. 따라서이 클래스는 일부 이벤트에 가입했습니다. 이벤트가 처리되면 비동기 메서드를 큐에 추가해야하며 모든 이전 작업이 완료 될 때 실행될 수 있습니다. 이 순간에 실현됩니다 : 하지만 ProccessTasks
메서드는 전나무 이벤트가 발생하면 작동을 멈 춥니 다.C# 작업 대기열
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 살펴보기 : http://msdn.microsoft.com/en-us/library/dd267312(v=vs.110).aspx –
... 또는 더 나은 아직 TPL DataFlow : http : // msdn. microsoft.com/en-us/library/hh228603%28v=vs.110%29.aspx 나를 위해 잘 작동했습니다. http://stackoverflow.com/questions/7863573/awaitable-task-based-queue?rq=1 – spender
@spender 그래서 Windows RT 용 앱을 쓰고 있습니다. System.Threading.Tasks.Dataflow가 없습니다. –