在ASP.NET中使用线程是否有任何不明显的危险?这是这个程序员问题的同级问题。简而言之,我们正在考虑将一些支持用户请求的工作“正确地”推到后台。如果我们走服务路线,这个相关问题给了我很多想法,但我们真的没有提供任何令人信服的论据。我承认,对我来说,有能力做WorkQueue.Push(delegate(objectcontext){...});的道德等价物真的很引人注目,所以如果它有点难(而不是本质上不可能),我倾向于后台线程方法。因此,我知道的后台线程问题(在AppPool的上下文中):ThreadPool用于响应传入的HTTP查询,因此使用它可能会使IIS挨饿我的问题是,如果有的话,我错过了什么?在ASP.NET中使用后台线程会出现什么问题?*有问题的任务已经安全地重新运行,所以这不是问题所在。?假设我们没有做任何真正愚蠢的事情,比如在后台线程中抛出异常。我会远离在IISAppDomain中为StackOverflow启动线程。我没有任何确凿的证据来支持我要说的话,但在IIS上工作了10年,我知道当它是唯一的游戏时,它的效果最好。还有一个替代方案,我知道它在我对程序员线程的回答中发挥了作用。但据我所知,您已经有了一个通过搭载工作用户请求的解决方案。为什么不使用该代码,而是仅在调用特殊的内部API时才启动它。然后使用TaskScheduler调用CURL命令,该命令每30秒左右调用一次API以启动任务。这样您就可以让IIS处理线程,并且您的代码可以轻松处理它已经完成的工作。我遇到的一个危险是CallContext。我们使用CallContext来设置用户身份数据,因为我们的Web应用程序和基于.NETRemoting的应用程序服务(旨在使用CallContext存储调用特定数据)共享相同的代码-所以我们没有使用HttpContext。我们注意到,有时新请求在CallContext中以非空身份结束。换句话说,ASP.NET不会在请求之间将存储在CallContext中的数据清零...因此,如果未经身份验证的用户选择的线程仍然具有包含经过身份验证的用户身份信息的CallContext,则它可能会进入应用程序。让我告诉您一个不明显的危险:)我正在使用线程集合将一些RSS提要更新到我为GoDaddy托管的网站的数据库中。线程工作正常(如果它们被终止,由于我在某些网页中内置的一些检查,它们会自动重新启动)。它工作得非常好,我很高兴直到GoDaddy(我的主机)首先开始杀死线程然后完全阻止它们。所以我的应用程序刚刚死了!如果那不明显,那是什么?一种可能是您使模式过于复杂而没有任何好处。您编写的程序将更加昂贵,维护成本更高,并且更容易出错。C#教程就是这些:在ASP.NET中使用线程是否有任何不明显的危险?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
