600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > Asp.net MVC 4 异步方法

Asp.net MVC 4 异步方法

时间:2023-12-24 19:55:41

相关推荐

Asp.net MVC 4 异步方法

前面一篇文章我们介绍了 MVC 3下异步操作。今天我们来看一下,同样功能在 MVC 4 下的实现,基于.net framework 4.5 下的async支持,让我们的代码更加简单,看下面片断代码名叫Index的Action方法:

public async Task<ActionResult> IndexAsync()

{

var cnblogsTask = GetStringAsync("");

var myblogTask = GetStringAsync("/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 下可用。你只可以使用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("", cancellationToken);

var myblogTask = GetStringAsync("/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看其中过程。

希望对您Web开发有帮助。

作者:Petter Liu

出处:/wintersun/

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

该文章也同时发布在我的独立博客中-Petter Liu Blog。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。