在Visual Studio 2012中使用Windows窗体设计器的新Async/Await模式

Woo*_*ass 7 visual-studio

我正在尝试使用visual studio 2012中的新Async/Await模式实现异步调用.当我设置我的表单(使用表单设计器)然后尝试使用异步方法作为事件处理程序时,编译器会抱怨函数不返回void.

该方法应该返回一个Task; 这就是重点.我无法弄清楚如何告诉表单设计器这不是一个常规的事件处理程序.有没有人遇到过这个问题?我应该退出快速开发的表单设计器吗?

Ree*_*sey 20

您必须使用async void事件处理程序的方法,而不是async Task.能够将事件处理程序连接到异步方法async void是允许的全部原因.

例如,如果要使用按钮单击处理程序,则可以将其写为:

private async void button_Click(object sender, EventArgs e)
{
     bool success = await CallSomeMethodAsync();
     if (success)
     {
          // Do something here, etc...
     }
}
Run Code Online (Sandbox Code Playgroud)

  • 您还应该将您的方法包装在 try/catch 中,以处理可能在您的事件中弹出的所有异常。虽然异步任务调用会重新出现调用者线程的异常,但异步无效调用无法做到这一点。异常将保留在子线程上并立即终止您的应用程序,而无法像您自己创建线程一样恢复。 (3认同)