public void CheckAsync(TLProxyBase proxy, double timeout, Action <ProxyItem, TLInt> callback) { var proxyItem = new ProxyItem { Proxy = proxy, Timeout = timeout }; var cts = new CancellationTokenSource(); var task = new Task(() => { var ping = CheckProxyInternal(proxyItem); _list.Remove(proxyItem); if (!cts.Token.IsCancellationRequested) { callback.SafeInvoke(proxyItem, ping); } }); proxyItem.TokenSource = cts; proxyItem.Task = task; _list.Add(proxyItem); task.Start(); }
private TLInt CheckProxyInternal(ProxyItem item) { TLInt ping = null; var handler = new ManualResetEvent(false); _mtProtoService.PingProxyAsync(item.Proxy, result => { ping = result; handler.Set(); }, error => { handler.Set(); }); #if DEBUG var complete = handler.WaitOne(Timeout.Infinite); #else var complete = handler.WaitOne(TimeSpan.FromSeconds(item.Timeout)); #endif return(ping); }