1.使用SemaphoreSlim
或类似机制来控制同时执行的任务数量。
例如,限制一次最多只有 50 个任务并发执行,其他任务在完成后才开始执行。
2.代码实例:
SemaphoreSlim semaphore = new SemaphoreSlim(50); // 限制最多50个并发任务
for (int i = 0; i < 10000; i += batchSize)
{
List<Task> captureTasks = new List<Task>();
for (int j = i; j < i + batchSize && j < 10000; j++)
{
int index = j; // 捕获图片任务的索引
await semaphore.WaitAsync(); // 等待一个可用的“槽”
captureTasks.Add(Task.Run(async () =>
{
try
{
await CaptureAndSavePhoto(Path.Combine(folderPath, $"photo_{index + 1}.jpg"));
}
finally
{
semaphore.Release(); // 完成任务后释放“槽”
}
}));
}
// 等待当前批次的所有图像处理完成
await Task.WhenAll(captureTasks);
Console.WriteLine($"Captured {i + batchSize} photos.");
}
上述代码示例限制了同时执行的任务数量为 50,避免了过高的并发数可能导致的性能问题。