Шаблон обработки async/await
У меня есть следующий повторяющийся шаблон try/catch в моем коде. Использование блока try/catch для обработки любых исключений, возникающих при вызове метода в orionProxy.
async private void doGetContacts()
{
try {
currentContacts = await orionProxy.GetContacts (); // call method in orionProxy
ShowContacts (); // do something after task is complete
}
catch (Exception e) {
orionProxy.HandleException (e); // handle thrown exception
}
}
Что я хотел бы написать, это примерно следующее.
async private void doGetContacts()
{
currentContacts = await orionProxy.CheckForException(orionProxy.GetContacts ());
ShowContacts (); // do something after task is complete but shouldn't run on exception
}
Любые указатели/предложения? Я пробовал различные формы Actions/Tasks/Lambdas, но ничто не приведет к ловушке исключения в orionProxy.CheckForException(?), Поэтому ShowContacts не запускается.
Ответы
Ответ 1
Я не понимаю, почему это не сработает, предполагая, что GetContacts
- это метод async
:
public async Task<T> CheckForExceptionAsync<T>(Task<T> source)
{
try
{
return await source;
}
catch (Exception ex)
{
HandleException(ex);
return default(T);
}
}
На стороне примечания вы должны избегать async void
(как я описал в своей статье MSDN) и завершите имена методов async
с суффиксом async
.