Asp.net MVC 4 异步方法
2024-08-24 18:35:04
今天我们来看一下,同样功能在 Asp.net MVC 4 下的实现,基于.net framework 4.5 下的async支持,让我们的代码更加简单,看下面片断代码名叫Index的Action方法:
public async Task<ActionResult> IndexAsync()
{
var cnblogsTask = GetStringAsync("http://www.cnblogs.com");
var myblogTask = GetStringAsync("http://www.cnblogs.com/wintersun");
// Asynchronously wait for them all to complete.
await Task.WhenAll(cnblogsTask, myblogTask);
Operations translations = new Operations() {
FirstOperation = cnblogsTask.Result, SecondOperation = myblogTask.Result };
return View(translations);
}
private static async Task<string> GetStringAsync(string uri
, CancellationToken cancelToken = default(CancellationToken))
{
using (HttpClient httpClient = new HttpClient())
{
var response = await httpClient.GetAsync(uri, cancelToken);
return (await response.Content.ReadAsStringAsync());
}
}
上面的代码我们实现多个Task并行异步,注意async与await关键字,在.NET 4.5 与 Visual Studio 2012下可用。你只可以使用await关键字同时标注了async的方法。使用异法的HttpClient来替代WebClient类,await关键字运用到HttpClient的异步方法上。使用Task.WhenAll等待所有任务结束。我们知道TPL中还提供了CancellationToken,MVC框架中也提供了AsyncTimeout特性,看面下面示例代码:
[AsyncTimeout(100)]
[HandleError(ExceptionType = typeof(TimeoutException),View = "Error")]
public async Task<ActionResult> IndexCancleAsync()
{
var cancellationToken = new CancellationToken(false);
var cnblogsTask = GetStringAsync("http://www.cnblogs.com", cancellationToken);
var myblogTask = GetStringAsync("http://www.cnblogs.com/wintersun", cancellationToken);
await Task.WhenAll(cnblogsTask, myblogTask);
Operations translations = new Operations()
{
FirstOperation = cnblogsTask.Result,
SecondOperation = myblogTask.Result
};
return View(translations);
}
我们设置异步超时为100毫秒,并且我们可以传递CancellationToken的参数给具体的Task。 最后把结果返回给View,实际你可以自行Debug看其中过程。
最新文章
- CanvasWebgl项目介绍
- 号称21世纪的编辑器Atom
- BZOJ4454: C Language Practice
- Timer的用法
- 修改SELinux设置,使vsftp在enforcing security enhance模式下正常运行
- PHP扩展开发(2) - VS2013环境搭建
- nginx请求体读取(二)
- java中的i++和++i区别
- python re 正则匹配 split sub
- javascript引擎执行的过程的理解--执行阶段
- Exp9 Web安全基础
- pandas处理时间序列(2):DatetimeIndex、索引和选择、含有重复索引的时间序列、日期范围与频率和移位、时间区间和区间算术
- topcoder srm 570 div1
- 安装旧版本的Firefox
- 《DSP using MATLAB》Problem 5.36
- 死磕nginx系列--nginx 限流配置
- python的时间差计算
- jmeter 基础功能详解
- MSTP多生成树的配置
- 【[SHOI2007]善意的投票】