在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
}
}
}
}