在其自己的线程中使用回调调用队列方法

本文关键字:回调 调用 队列 方法 自己的 线程 | 更新日期: 2023-09-27 18:18:53

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

在其自己的线程中使用回调调用队列方法

不要创建一个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();
        }
    }
}

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