У методов, возвращающих Task
, есть две опции для сообщения об ошибке:
- исключительное исключение
- возвращает задачу, которая завершится с исключением
Если вызывающий абонент ожидает представления обоих типов сообщений об ошибках или существует какой-то стандарт/соглашение, которое ограничивает поведение задачи вторым вариантом?
Пример:
class PageChecker {
Task CheckWebPage(string url) {
if(url == null) // Argument check
throw Exception("Bad URL");
if(!HostPinger.IsHostOnline(url)) // Some other synchronous check
throw Exception("Host is down");
return Task.Factory.StartNew(()=> {
// Asynchronous check
if(PageDownloader.GetPageContent(url).Contains("error"))
throw Exception("Error on the page");
});
}
}
Обработка обоих типов выглядит довольно уродливо:
try {
var task = pageChecker.CheckWebPage(url);
task.ContinueWith(t =>
{
if(t.Exception!=null)
ReportBadPage(url);
});
}
catch(Exception ex) {
ReportBadPage(url);
}
Использование async/await может помочь, но есть ли решение для простой .NET 4 без асинхронной поддержки?