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); }
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-запросе не забыли, а не запросили из-за проблем с пингом или отменой } }