private async void PingParallelAwait() { var pinger = new TwitchServersPinger(); var pingTasks = new List <Task <TwitchPingResult> >(); foreach (var server in servers) { serverNameToControl[server.Name].Pinging = true; var pingTask = Task.Run <TwitchPingResult>(() => pinger.PingAsyncTaskArgs(server)); pingTasks.Add(pingTask); } while (pingTasks.Count > 0) { var firstFinishedTask = await Task.WhenAny(pingTasks); pingTasks.Remove(firstFinishedTask); var pingResult = await firstFinishedTask; serverNameToControl[pingResult.Server.Name].ServerPing = pingResult.Ping.Milliseconds; serverNameToControl[pingResult.Server.Name].Pinging = false; } }