如何使用async/await在asp.net webform中实现异步页面?

Doz*_*zer 14 asp.net asynchronous webforms async-await

我们现在可以在ASP.NET MVC 4中使用async/await关键字.

public async Task<ActionResult> TestAsync()
{
    WebClient client = new WebClient();
    return Content(await client.DownloadStringTaskAsync("http://www.google.com"));
}
Run Code Online (Sandbox Code Playgroud)

但是如何在ASP.NET WebForms中使用它?

Ste*_*ary 22

一种简单的方法就是制作事件处理程序async.首先,将Async="true"参数添加到@Page指令中,然后您应该能够编写异步事件处理程序:

protected async void Page_Load(object sender, EventArgs e)
{
  var client = new WebClient();
  var content = await client.DownloadStringTaskAsync("http://www.google.com");
  Response.Write(content);
}
Run Code Online (Sandbox Code Playgroud)

我说"应该能够",因为我自己并没有真正尝试过.但它应该工作.

更新:这并没有对工作Page_Load(见这个MSDN论坛主题),而是应该对其他的事件,如按钮点击工作.

更新:确实工作Page_Load在ASP.NET 4.5.此外,如果您不正确地使用async事件处理程序,他们会添加检查.有关详情,请参阅此视频.