我应该一次触发多少个 IO 绑定异步任务?

How many IO bound async tasks should I fire at once?

我正在向 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