如何识别ConcurrentQueue <Func <CancellationToken,Task >>项目?

时间:2019-07-11 18:58:24

标签: c# asp.net-core

来自此示例:here 使用以下队列。

public class BackgroundTaskQueue : IBackgroundTaskQueue
{
    public ConcurrentQueue<Func<CancellationToken, Task>> _workItems =
        new ConcurrentQueue<Func<CancellationToken, Task>>();
    private SemaphoreSlim _signal = new SemaphoreSlim(0);

    public void QueueBackgroundWorkItem(
        Func<CancellationToken, Task> workItem)
    {
        if (workItem == null)
        {
            throw new ArgumentNullException(nameof(workItem));
        }

        _workItems.Enqueue(workItem);
        _signal.Release();
    }

    public async Task<Func<CancellationToken, Task>> DequeueAsync(
        CancellationToken cancellationToken)
    {
        await _signal.WaitAsync(cancellationToken);
        _workItems.TryDequeue(out var workItem);

        return workItem;
    }
}

从api控制器中调用它,但需要能够检查其状态。

控制器:

var guid = Guid.NewGuid().ToString();           
queue.QueueBackgroundWorkItem(async token=>{
   await Task.Delay(TimeSpan.FromSeconds(60), token);
});

我如何将Guid与任务相关联并在以后进行检查?

0 个答案:

没有答案