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



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

最新更新