如何在C#

时间:2016-10-30 19:59:21

标签: c# .net task producer-consumer worker

在C#.Net 4中,我想实现一个异步顺序工作器,它逐个排队并执行Actions。但是,两个或多个顺序工作者可以同时并且彼此独立地运行 关于性能和资源使用的最佳实现是什么?! (我知道生产者 - 消费者模式适合这个但是如何实现它?!)

下面我将空类的代码放入,然后是一个天真的实现。

public class SequentialWorker
{
    public void DoAsync(Action action1)
    {
        // queue and run action1 after previous actions, on a seperate thread
    }
}

天真的实施:

public class SequentialWorker
{
    private Task task;
    private readonly Queue<Action> actions = new Queue<Action>();

    public void DoAsync(Action action1)
    {
        lock (actions)
        {
            actions.Enqueue(action1);
            if (task == null || task.IsCompleted) // if completed or not created, create a new task
            {
                task = Task.Factory.StartNew(DoActions);
            }
        }
    }

    private void DoActions()
    {
        while (true)
        {
            try
            {
                Action action;
                lock (actions)
                {
                    if (!actions.Any())
                        return;
                    action = actions.Dequeue();
                }

                action();
            }
            catch (Exception e)
            {
                //handle e
            }
        }
    }
}

0 个答案:

没有答案