Example #1
0
        public async Task <bool> HandleAsync(CheckRow checkRow, Task <HttpResponseMessage> task)
        {
            bool isContinue = false;

            if (task == null)
            {
                checkRow.ResultGet = StatusChecking.nostartedFinished;
            }
            else
            {
                try
                {
                    HttpResponseMessage reply = await task;
                    isContinue         = true;
                    checkRow.ResultGet = StatusChecking.win;
                }
                catch
                {
                    if (task.IsCanceled)
                    {
                        checkRow.ResultGet = StatusChecking.canceled;
                    }
                    if (task.IsFaulted)
                    {
                        checkRow.ResultGet = StatusChecking.fail;
                    }
                }
            }
            return(isContinue);
        }
Example #2
0
        public async Task <bool> HandleAsync(CheckRow checkRow, Task <PingReply> task)
        {
            bool isContinue = false;

            if (task == null)
            {
                checkRow.ResultPing = StatusChecking.fail;
            }
            else
            {
                try
                {
                    PingReply reply = await task;
                    isContinue          = true;
                    checkRow.ResultPing = StatusChecking.win;
                }
                catch
                {
                    if (task.IsCanceled)
                    {
                        checkRow.ResultPing = StatusChecking.canceled;
                    }
                    if (task.IsFaulted)
                    {
                        checkRow.ResultPing = StatusChecking.fail;
                    }
                }
            }
            return(isContinue);
        }
        public async Task CheckAddressAsync(CheckRow checkRow, CancellationToken cancelToken)
        {
            Task <PingReply> pingTask = null;

            try { pingTask = pinger.SendPingAsync(checkRow.Host, cancelToken); } catch { };               // Эта странная конструкция на этой строке возведена из-за того что при пинге 0.0.0.2 или ::2 происходит null exception который не хочет дожидаться, пока таск будет затащен в ближайший try. Остальные исключение обрабатываются в хандлерах.
            if (await handlerPing.HandleAsync(checkRow, pingTask) & !cancelToken.IsCancellationRequested) // если ни ошибок в пинге, ни отмены не произошло, совершаем get-запрос
            {
                Task <HttpResponseMessage> getTask = httpGetter.GetAsync(checkRow.Uri, cancelToken);
                await handlerGet.HandleAsync(checkRow, getTask);
            }
            else
            {
                await handlerGet.HandleAsync(checkRow, null); // Отобразим, что о get-запросе не забыли, а не запросили из-за проблем с пингом или отменой
            }
        }