首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C#任务队列

C#任务队列
EN

Stack Overflow用户
提问于 2014-03-26 21:05:37
回答 1查看 1.6K关注 0票数 0

我需要按顺序处理任务。所以这个类订阅了一些事件。在处理事件时,必须将异步方法添加到队列中,并可能在之前所有任务完成后执行。此时它是这样实现的:但是当firs事件被引发时,ProccessTasks方法停止工作。

代码语言:javascript
复制
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());
    }
}
EN

回答 1

Stack Overflow用户

发布于 2014-03-26 22:40:06

问题是你永远不会开始你的任务,永远不会。您将未启动的任务放入队列中,然后在将其拉出时等待未启动的任务。

话虽如此,我还是不鼓励你只做一个小小的改变。通常,如您所见,处理未启动的任务非常容易出错。我建议使用Action对象而不是Task对象。当您将操作从队列中拉出时,您可以执行它,或者如果您想保持异步,可以使用Task.Run在另一个线程中运行它。

您也不需要使用Task.Run调用ProccessTasks。它已经是异步的,所以不需要在后台线程中运行它。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22661979

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档