具有受控并行性和AwaitAll选项的异步任务

时间:2017-02-15 22:02:25

标签: c# async-await task

我有一个场景,我的应用程序中的不同代码可以调用以下方法

async Task downloadFile(string fileName)
{
    await downloadService(fileName);
}

需要一种机制,我可以控制它可以发送的最大请求数。例如,在5个活动请求之后,我希望其余的排队等待,然后只有在我们从其中一个现有请求得到响应后才会启动。我还需要一个机制,我可以在我的代码中监听所有活动/排队的请求,如Task.WhenAll

我最感兴趣的是内置的.Net库。我知道TaskScheduler但似乎我自己实现了大部分的Enqueue / Dequeue内容。想知道是否存在更合适的图书馆。

1 个答案:

答案 0 :(得分:5)

您可以按以下方式试用SemaphoreSlim课程:

SemaphoreSlim semaphore = new SemaphoreSlim(5, 5);

async Task downloadFile(string fileName)
{
    await semaphore.WaitAsync();

    try
    {
        await downloadService(fileName);
    }
    finally
    {
        semaphore.Release();
    }
}