MyException - 我的异常网
当前位置:我的异常网» ASP.NET » 关于Task跟Response.Redirect

关于Task跟Response.Redirect

www.MyException.Cn  网友分享于:2015-08-26  浏览:0次
关于Task和Response.Redirect
在点击登录后执行:

var task = Task.Factory.StartNew(() =>
 {
       //这里是数据库操作,如,数据插入和更新等工作
 });
//页面跳转
Response.Redirect("index.html");

这样写可以吗?
因为不想登录时间太长,所有使用Task,但不知道这样写是否会因为这个页面的生命周期结束,会把我的子线程杀掉呢,
还是系统会等我的操作执行完才会自动回收呢?
------解决思路----------------------
看这个讨论,应该是可以的。
Do asynchronous operations in ASP.NET MVC use a thread from ThreadPool on .NET 4
http://stackoverflow.com/questions/8743067/do-asynchronous-operations-in-asp-net-mvc-use-a-thread-from-threadpool-on-net-4

Task执行完会放回thread pool.

只是要注意线程开销,这样使用每个request就是要从thread pool里面拿两个thread出来。
------解决思路----------------------
他的意思就是要让线程池线程尽快释放,因为它们数量有限,还要用来处理新的请求;I/O相关的操作使用异步调用,这样可以利用IOCP来在等待I/O完成的过程中不使用任何线程。

举个例子,比如一个Action里要从别的服务器下载一个文件,那么以下那种方式更好?
一:Action之内同步调用

public ActionResult Index()
{
    WebClient.DownloadFile(...);
    return View();
}

二:Action之内开task,task内同步调用

public ActionResult Index()
{
    Task.Factory.StartNew(() => WebClient.DownloadFile(...));
    return View();
}

三:Action内异步调用

public ActionResult Index()
{
    WebClient.DownloadFileAsync(...);
    return View();
}

四:Action内开task,task内异步调用

public ActionResult Index()
{
    Task.Factory.StartNew(() => WebClient.DownloadFileAsync(...));
    WebClient.DownloadFileAsync(...);
    return View();
}

结论是第三种最好,线程都很快被释放,没有不必要的等待。
第四种和第三种没什么区别,那个task立即结束,有些多余。
第一种要等很久才能返回,大部分时间都浪费在了等待下载文件,线程无法释放,用户也看不到响应,这样最不好。
第二种是让页面快点返回,但是仍然占用了一个线程在等待下载文件,还是浪费掉一个线程,不过比第一种好点。

综上,对于你的问题结论是:为了避免用户等待,可以用第二种方式,但是要注意,在task里数据库的更新操作越快越好,特别像最后的提交操作,要使用异步调用。尽量让task早点释放。
------解决思路----------------------
引用:
谢谢@findcaiyzh的回答,但不太理解:
使用Task:
When a request is received for the Index action a thread is drawn from the thread pool to executed its body. Bit its body only schedules a new task using TPL. So the action execution ends and the thread is returned to the thread pool. Except that, TPL uses threads from the thread pool to perform their processing. So even if the original thread was returned to the thread pool, you have drawn another thread from this pool to execute the body of the task. So you have jeopardized 2 threads from your precious pool.
他是说在线程池中多使用了一个线程,线程池的线程是珍贵的,会损耗很多系统资源?但这样并不能说服我不使用Task,能解释一下吗?


每个request到来都会从线程池里拿一个线程处理,如果线程池里没有空闲的线程了,asp.net就会等有线程被释放。因此如果使用Task耗尽线程池里的线程,并不能提高response时间。
------解决思路----------------------
1、这样写可以
2、不会因为页面跳转就终止子线程
下面是一段测试代码,你可以看看

        protected void Unnamed_Click(object sender, EventArgs e)
        {
            var task = Task.Factory.StartNew(() =>
            {
                for (int i = 0; i < 100000; i++)
                {
                    Write(i);
                    Thread.Sleep(100);
                }
            });
            //页面跳转
            Response.Redirect("WebForm2.aspx");
        }

        private void Write(int i)
        {
            StreamWriter sw = new StreamWriter("C:\\11.txt",true);
            sw.WriteLine(i);
            sw.Close();
        }

文章评论

中美印日四国程序员比较
中美印日四国程序员比较
“肮脏的”IT工作排行榜
“肮脏的”IT工作排行榜
Java程序员必看电影
Java程序员必看电影
那些性感的让人尖叫的程序员
那些性感的让人尖叫的程序员
漫画:程序员的工作
漫画:程序员的工作
总结2014中国互联网十大段子
总结2014中国互联网十大段子
2013年中国软件开发者薪资调查报告
2013年中国软件开发者薪资调查报告
那些争议最大的编程观点
那些争议最大的编程观点
程序员的鄙视链
程序员的鄙视链
当下全球最炙手可热的八位少年创业者
当下全球最炙手可热的八位少年创业者
2013年美国开发者薪资调查报告
2013年美国开发者薪资调查报告
程序员眼里IE浏览器是什么样的
程序员眼里IE浏览器是什么样的
Web开发者需具备的8个好习惯
Web开发者需具备的8个好习惯
如何区分一个程序员是“老手“还是“新手“?
如何区分一个程序员是“老手“还是“新手“?
程序员最害怕的5件事 你中招了吗?
程序员最害怕的5件事 你中招了吗?
看13位CEO、创始人和高管如何提高工作效率
看13位CEO、创始人和高管如何提高工作效率
老美怎么看待阿里赴美上市
老美怎么看待阿里赴美上市
做程序猿的老婆应该注意的一些事情
做程序猿的老婆应该注意的一些事情
10个调试和排错的小建议
10个调试和排错的小建议
每天工作4小时的程序员
每天工作4小时的程序员
写给自己也写给你 自己到底该何去何从
写给自己也写给你 自己到底该何去何从
我跳槽是因为他们的显示器更大
我跳槽是因为他们的显示器更大
团队中“技术大拿”并非越多越好
团队中“技术大拿”并非越多越好
科技史上最臭名昭著的13大罪犯
科技史上最臭名昭著的13大罪犯
聊聊HTTPS和SSL/TLS协议
聊聊HTTPS和SSL/TLS协议
代码女神横空出世
代码女神横空出世
程序员都该阅读的书
程序员都该阅读的书
初级 vs 高级开发者 哪个性价比更高?
初级 vs 高级开发者 哪个性价比更高?
不懂技术不要对懂技术的人说这很容易实现
不懂技术不要对懂技术的人说这很容易实现
Web开发人员为什么越来越懒了?
Web开发人员为什么越来越懒了?
亲爱的项目经理,我恨你
亲爱的项目经理,我恨你
Java 与 .NET 的平台发展之争
Java 与 .NET 的平台发展之争
 程序员的样子
程序员的样子
十大编程算法助程序员走上高手之路
十大编程算法助程序员走上高手之路
我是如何打败拖延症的
我是如何打败拖延症的
编程语言是女人
编程语言是女人
老程序员的下场
老程序员的下场
程序员的一天:一寸光阴一寸金
程序员的一天:一寸光阴一寸金
程序猿的崛起——Growth Hacker
程序猿的崛起——Growth Hacker
一个程序员的时间管理
一个程序员的时间管理
程序员周末都喜欢做什么?
程序员周末都喜欢做什么?
什么才是优秀的用户界面设计
什么才是优秀的用户界面设计
“懒”出效率是程序员的美德
“懒”出效率是程序员的美德
程序员应该关注的一些事儿
程序员应该关注的一些事儿
我的丈夫是个程序员
我的丈夫是个程序员
鲜为人知的编程真相
鲜为人知的编程真相
要嫁就嫁程序猿—钱多话少死的早
要嫁就嫁程序猿—钱多话少死的早
5款最佳正则表达式编辑调试器
5款最佳正则表达式编辑调试器
为啥Android手机总会越用越慢?
为啥Android手机总会越用越慢?
软件开发程序错误异常ExceptionCopyright © 2009-2015 MyException 版权所有