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

Hab*_*bib 2 c# task async-await

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

async Task downloadFile(string fileName)
{
    await downloadService(fileName);
}
Run Code Online (Sandbox Code Playgroud)

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

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

wdo*_*jos 6

您可以按如下方式尝试SemaphoreSlim类:

SemaphoreSlim semaphore = new SemaphoreSlim(5, 5);

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

    try
    {
        await downloadService(fileName);
    }
    finally
    {
        semaphore.Release();
    }
}
Run Code Online (Sandbox Code Playgroud)