1. 在.aspx中添加异步标记

<%@ Page Language="C#" Async="true"%>

2. 在.aspx.cs或者.ascx.cs(用户控件)中添加异步方法

private async Task GetMyPosts()
{
var posts = await ServiceFactory.BlogPostSevice.GetBlogPostsPagedAsync();
rpPosts.DataSource = posts;
rpPosts.DataBind();
}

3. 在.aspx.cs或者.ascx.cs的Page_Load或者OnLoad注册异步方法

protected void Page_Load(object sender, EventArgs e)
{
this.Page.RegisterAsyncTask(new PageAsyncTask(GetMyPosts));
}

搞定!

【参考资料】

How to create Asynchronous device Page in ASP.NET 4.5

from : http://www.cnblogs.com/dudu/p/aspnet-webform-async.html

不要在 ASP.NET 4.5 Beta 的 Page 类事件上直接使用 async 与 await

下面代码中的这种用法是错误的:

1
2
3
4
5
6
7
8
protected async void Page_Load(object sender, EventArgs e)
{
    WebClient client = new WebClient();
    var result1 = await client.DownloadStringTaskAsync("http://www.website.com");
    WebClient client2 = new WebClient();
    var result2 = await client.DownloadStringTaskAsync(result1);
    //do more
}

在事件上直接使用 async 引发的错误

目前正确的写法
首先,建议把 UseTaskFriendlySynchronizationContext 设置为 true。 另外,正确的写法如下: public partial class WebForm1 : System.Web.UI.Page
{
protected string Msg { get; set; }
protected void Page_Load(object sender, EventArgs e)
{
RegisterAsyncTask(new PageAsyncTask(Method1)); }
private async Task Method1()
{
using (WebService service = new WebService())
{
Msg = await service.HelloWorldTaskSync();
}
} protected void Button_Test_Click(object sender, EventArgs e)
{
RegisterAsyncTask(new PageAsyncTask(Method2));
} private async Task Method2()
{
using (WebService service = new WebService())
{
Msg = await service.HelloWorldTaskSync();
}
}
}
如果需要写异步,一定要用 RegisterAsyncTask 方法,实测证明,支持多次调用,而且会按次序执行。

from:http://www.cnblogs.com/dozer/archive/2012/03/14/async-and-await-in-asp-net-beta.html

参考资料:

http://stackoverflow.com/questions/9562836/whats-the-meaning-of-usetaskfriendlysynchronizationcontext

http://social.msdn.microsoft.com/Forums/en-NZ/async/thread/b2e8c51e-2808-46d0-92e9-b825321d0af8

ASP.NET WebForm中用async/await实现异步的更多相关文章

  1. ASP.NET WebForm中用async/await实现异步出人意料的简单

    1. 在.aspx中添加异步标记 <%@ Page Language="C#" Async="true"%> 2. 在.aspx.cs或者.ascx ...

  2. [.NET] 利用 async & await 的异步编程

    利用 async & await 的异步编程 [博主]反骨仔 [出处]http://www.cnblogs.com/liqingwen/p/5922573.html  目录 异步编程的简介 异 ...

  3. [.NET] 利用 async & await 进行异步 IO 操作

    利用 async & await 进行异步 IO 操作 [博主]反骨仔 [出处]http://www.cnblogs.com/liqingwen/p/6082673.html  序 上次,博主 ...

  4. 利用 async & await 的异步编程

    走进异步编程的世界 - 开始接触 async/await 利用 async & await 的异步编程 async 的三大返回类型 公司技术需求备忘录

  5. async+await处理异步问题

    在编写网页的时候我们常常会遇到异步问题,async+await是es6提出的解决异步的方法,下面我们来看看这个方法怎么实现解决异步的, 大家都知道,setTimeout是一个定时器.他是一个异步执行的 ...

  6. Atitit. Async await 优缺点 异步编程的原理and实现 java c# php

    Atitit. Async await 优缺点 异步编程的原理and实现 java c# php 1. async & await的来源1 2. 异步编程history1 2.1. 线程池 2 ...

  7. 使用ES6新特性async await进行异步处理

    我们往往在项目中会遇到这样的业务需求,就是首先先进行一个ajax请求,然后再进行下一个ajax请求,而下一个请求需要使用上一个请求得到的数据,请求少了还好说,如果多了,就要一层一层的嵌套,就好像有点c ...

  8. 深入理解协程(三):async/await实现异步协程

    原创不易,转载请联系作者 深入理解协程分为三部分进行讲解: 协程的引入 yield from实现异步协程 async/await实现异步协程 本篇为深入理解协程系列文章的最后一篇. 从本篇你将了解到: ...

  9. vue中用 async/await 来处理异步

    原文作者:https://www.cnblogs.com/SamWeb/p/8417940.html 昨天看了一篇vue的教程,作者用async/ await来发送异步请求,从服务端获取数据,代码很简 ...

随机推荐

  1. 使用redis作为session的存储方式

    (1)准备 A. 安装好redis https://github.com/MSOpenTech/redis  注意:下载release版 启动脚本如下: redis-server  redis.win ...

  2. ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.

    看图:

  3. bzoj3743: [Coci2015]Kamp

    首先树dp求出一个点的答案 然后再一遍dfs换根(是叫做换根吗.. 详见代码 #include <iostream> #include <cstdio> #include &l ...

  4. Value和Object的区别

    在使用NSMutableDictionary的时候经常会使用setValue forKey与setObject forKey,他们经常是可以交互使用的,代码中经常每一种的使用都有. 1,先看看setV ...

  5. 72.40个Android面试题(转载)

    1. Android的四大组件是哪些,它们的作用? 答:Activity:Activity是Android程序与用户交互的窗口,是Android构造块中最基本的一种,它需要为保持各界面的状态,做很多持 ...

  6. [日常训练]常州集训day5

    T1 Description 小$W$和小$M$一起玩拼图游戏啦~ 小$M$给小$M$一张$N$个点的图,有$M$条可选无向边,每条边有一个甜蜜值,小$W$要选$K$条边,使得任意两点间最多有一条路径 ...

  7. 【caffe】train_lenet.sh在windows下的解决方案

    @tags: caffe python 在windows下配置caffe后,跑mnist手写数字识别的例子.发现train_lenet.sh不能运行. 那就写个python脚本替代吧. step1 定 ...

  8. 【bzoj3158】 千钧一发

    http://www.lydsy.com/JudgeOnline/problem.php?id=3158 (题目链接) 题意 给出n个装置,每个装置i有一个特征值a[i]和一个能量值b[i],要求选出 ...

  9. Stream篇

    本文转自: http://www.cnblogs.com/JimmyZheng/archive/2012/03/17/2402814.html 什么是Stream? 什么是字节序列? Stream的构 ...

  10. Windows下Nginx+Mysql+Php(wnmp)环境搭建

    前言 最近想在windows下使用nginx搭建web环境,本来想用套件(WNMP)一键安装,但后来放弃了,觉得还是自己动手,丰衣足食的好,而且套件的局限性太大.所以后来就各种搜索,看到前辈写关于wn ...