498)this.width=498;'' onmousewheel = ''javascript:return big(this)'' alt="" src="/uploadfile/201301/5/D215529508.png" />
可以看到整个异步过程由ASP.NET完成,在适当的时候会调用我们的方法。异步的开始、结束动作与及如何触发完成都在我们的代码中体现。
异步Action模式二:Task Action
对于Action,如果返回的类型是 Task,ASP.NET MVC则会将他们包装成TaskAsyncActionDescriptor。
- public class DefaultController : Controller
- {
- public async Task<FileResult> Download()
- {
- using (FileStream fs = new FileStream("D:\\a.txt", FileMode.Open, FileAccess.Read, FileShare.ReadWrite, 4096, FileOptions.Asynchronous))
- {
- byte[] data = new byte[fs.Length];
- await fs.ReadAsync(data, 0, data.Length);
- return new FileContentResult(data, "application/octet-stream");
- }
- }
- }
我只需要需提供一个返回类型为Task的方法即可,我里我们采用async/await语法构建一个异步方法,在方法内部调用其他的异步方法。
498)this.width=498;'' onmousewheel = ''javascript:return big(this)'' alt="" src="/uploadfile/201301/5/7615529222.png" />
相比之前的模式,简单了一些,特别是我们的Controller中,只有一个方法,异步的操作都交由Task完成。对于可以返回Task的方法来说(如通过async/await包装多个异步方法),就显得十分方便。
原文链接:http://www.cnblogs.com/wisdomqq/archive/2012/03/29/2417723.html