zoukankan      html  css  js  c++  java
  • MVC系统学习8——AsyncController

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

    //这个action以Async结尾,并且返回值是void
            public void TestAsync()
            {
                //实现异步action加计数1
                AsyncManager.OutstandingOperations.Increment();
                FileStream fileStream = new FileStream(@"C:UserswuxqDocumentsVisual Studio 2010ProjectsMvcAppDemo2AsyncControllerDemo并发控制.txt", FileMode.Open);
                byte[] byteArray = new byte[fileStream.Length];
                fileStream.BeginRead(byteArray, 0, (int)fileStream.Length, (IAsyncResult result) =>
                {
                    string content = Encoding.Default.GetString(byteArray);
                    //参数要放在这个字典里面实现向Completed action传递
                    AsyncManager.Parameters["content"] = content;
                    //异步action回调结束
                    AsyncManager.OutstandingOperations.Decrement();
                    fileStream.Close();
                }, null);
            }
    
            //这个action以Completed为后缀异步action结束后调用的函数,返回值为ActionResult
            public ActionResult TestCompleted(string content)
            {
                Response.Write(content);
                return View();
            }
    View Code

           此外还要另外注意几点:

           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方法的作用

    明确个目标,一直走下去
  • 相关阅读:
    java里面嵌套执行python脚本
    session的token令牌机制防止表单重复提交
    springIOC实现原理模拟(springIOC底层使用xml解析+反射实现)
    service层使用接口的好处
    javap -verbose输出结果详解
    skiplist
    Jmeter内存溢出解决方法
    Jmeter参数化设置的5种方法
    方法入参获取泛型类型
    并发编程笔记
  • 原文地址:https://www.cnblogs.com/fhlj/p/3615238.html
Copyright © 2011-2022 走看看