Mvc系统学习8——AsyncController

      关于为什么使用异步Controller,这里不做备忘,三岁小孩都懂。主要的备忘是如何使用AsyncController。

View Code
1 //这个action以Async结尾,并且返回值是void
2 public void TestAsync()
3 {
4 //实现异步action加计数1
5 AsyncManager.OutstandingOperations.Increment();
6 FileStream fileStream = new FileStream(@"C:\Users\wuxq\Documents\Visual Studio 2010\Projects\MvcAppDemo2\AsyncControllerDemo\并发控制.txt", FileMode.Open);
7 byte[] byteArray = new byte[fileStream.Length];
8 fileStream.BeginRead(byteArray, 0, (int)fileStream.Length, (IAsyncResult result) =>
9 {
10 string content = Encoding.Default.GetString(byteArray);
11 //参数要放在这个字典里面实现向Completed action传递
12 AsyncManager.Parameters["content"] = content;
13 //异步action回调结束
14 AsyncManager.OutstandingOperations.Decrement();
15 fileStream.Close();
16 }, null);
17 }
18
19 //这个action以Completed为后缀异步action结束后调用的函数,返回值为ActionResult
20 public ActionResult TestCompleted(string content)
21 {
22 Response.Write(content);
23 return View();
24 }

       此外还要另外注意几点:

       1.对于异步请求,当发起另外一个线程去处理请求没有返回怎么办,比如抛出异常?框架默认的超时时间是45秒,在45秒到了之后框架会抛出一个System.TimeoutException以中止这个异步请求,我们可以通过[AsyncTimeOut((int duration)]来设置超时时间,还可以通过NoAsyncTimeout或者[AsyncTimeout(Timeout.Infinite)]来设置永不过期。

       2.可以使用AsyncManager.Finish方法来中止所有还未结束的异步操作,进而调用Completed action,如果被强制中止的异步操作还没有成功返回某些参数时,Completed将使用这些参数的默认值(如int为0,string为empty)。

       3.AsyncManager.Sync方法的作用

posted @ 2011-05-03 22:20  雁北飞  阅读(1300)  评论(0编辑  收藏  举报