Как определить элемент ConcurrentQueue <Func <CancellationToken, Task >>? - PullRequest
0 голосов
/ 11 июля 2019

из этого примера: здесь Использование следующей очереди.

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 с задачей и проверить ее позже?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...