Example #1
0
        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();
        }
Example #2
0
        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);
        }