我正在向IP摄像机发射命令,大约有数千个,代码和网络请求在ConnectCam方法中。我使用以下模式使用 Task.WhenAny() 一次触发它们。这有什么潜在的瓶颈吗?我应该限制请求吗?
List<Task> tasks = deviceList.Select(x => ConnectCamAsync(ct, x.IpAddress, x.UserName, x.PassWord)).ToList();
var orgCount = tasks.Count();
while (tasks.Count() > 0)
{
ct.ThrowIfCancellationRequested();
try
{
var firstFinishedTask = await Task.WhenAny(tasks);
tasks.Remove(firstFinishedTask);
await firstFinishedTask;
}
finally
{
UpdateProgress(0, orgCount, orgCount - tasks.Count());
}
}
如果同时打开数千个连接,当然会出现性能瓶颈。我不认为可以不受限制地处理这么多请求。
您可以考虑使用SemaphoreSlim