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