0

在问了一个类似的问题(感谢您的回答)之后,我想在队列中添加另一个功能,但不幸的是我不知道如何实现这个:我想为每个添加的函数添加一个可选回调。当此给定函数完成时,应调用该回调。如何添加此功能?

4

1 回答 1

2

而不是 a BlockingCollection<Func<object>>,而是创建一个类来保存要执行的函数和可选的回调:

class QueueItem
{
    public Func<object> FuncToExecute { get; set; }
    public Action OptionalCallback { get; set; }
}

您将项目添加到队列的方法变为:

void AddFunction(Func<object> functionToAdd, Action callback = null)
{
    Queue.Add(new QueueItem(functionToAdd, callback);
}

当您出列一个项目时,执行该函数,如果它不为空,则调用回调:

public void ProcessQueue()
{
    QueueItem item;
    while (!IsCancelled && queue.TryTake(out item, Timeout.Infinite))
    {
        item.FuncToExecute();
        if (item.OptionalCallback != null)
        {
            item.OptionalCallback();
        }
    }
}

以上假设您使用的是我在回答您的链接问题时推荐的模型。

于 2013-06-18T05:04:57.273 回答