33

我的代码中有以下重复出现的 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 无法运行。

4

1 回答 1

53

我不明白为什么它不起作用,假设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 文章中所描述的那样)asyncAsync后缀.

于 2013-10-02T23:38:56.557 回答