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

时间:2019-01-28 12:20:52

标签: c# async-await task-parallel-library

我正在向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());
                }
            }

1 个答案:

答案 0 :(得分:0)

如果您同时打开数千个连接,那么当然会出现性能瓶颈。我认为可以无限制地处理这么多请求。

您可以考虑使用SemaphoreSlim