private async void Ping() { var pinger = new TwitchServersPinger(); foreach (var server in servers) { serverNameToControl[server.Name].Pinging = true; serverNameToControl[server.Name].ServerPing = await Task.Run(() => { return(pinger.Ping(server).Milliseconds); }); serverNameToControl[server.Name].Pinging = false; } }
private void PingParallelEvents() { var pinger = new TwitchServersPinger(); pinger.PingCompleted += (sender, args) => { var control = serverNameToControl[args.Server.Name]; control.ServerPing = args.Ping.Milliseconds; control.Pinging = false; }; foreach (var server in servers) { serverNameToControl[server.Name].Pinging = true; var task = new Task(() => pinger.PingAsyncVoid(server)); task.Start(TaskScheduler.FromCurrentSynchronizationContext()); } }
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; } }