An example from andreycha throttling pattern:
public async Task CheckServers() { var servers = new List<string>(10000) { ... }; const int ConcurrencyLevel = 100; // запускаем первые 100 запросов var tasks = servers.Take(ConcurrencyLevel).Select(GetVersion).ToList(); int nextIndex = ConcurrencyLevel; while (tasks.Count > 0) { // дожидаемся завершения любого запроса var completedTask = await Task.WhenAny(tasks); // удаляем его из списка tasks.Remove(completedTask); // добавляем новый запрос, если таковые остались if (nextIndex < servers.Count) { tasks.Add(GetVersion(servers[nextIndex++])); } string rfbVersion = await completedTask; // работаем с версией } } How in such implementation it is nice to set the TaskCreationOptions.LongRunning parameter TaskCreationOptions.LongRunning tasks? Is this even possible without using Task.Factory.StartNew ?