List tasks = new List(); int maxTaskCount = 10; SemaphoreSlim semaphore = new SemaphoreSlim(maxTaskCount); for (var i = 0; i < 30; i++) { await semaphore.WaitAsync(); int index = i; // 避免闭包捕获循环变量的问题 tasks.Add(Task.Run(async () => { //任务内容 try { using (FileStream fileStream = new FileStream(ls[0], FileMode.Open, FileAccess.Read)) { using (MemoryStream stream = new MemoryStream()) {
await fileStream.CopyToAsync(stream);
RardarHelper rd = new RardarHelper();
rd.DecodeDiamond_CR_131(stream, _webHostEnvironment.WebRootPath, (index * 6).ToString());
}
}
}
finally
{
semaphore.Release();
}
}));
if (tasks.Count > maxTaskCount)
{
// 等待任何一个完成,不会阻塞当前线程
await Task.WhenAny(tasks);
// 排除掉已完成的任务
tasks.RemoveAll(t => t.IsCompleted);
}
} // 等待所有任务完成 await Task.WhenAll(tasks);