我在项目中看到这段代码,我想知道它是否安全:
(ASP.NET MVC 2.0)
class MyController
{
void ActionResult SomeAction()
{
System.Threading.Thread newThread = new System.Threading.Thread(AsyncFunc);
newThread.Start();
}
void AsyncFunc()
{
string someString = HttpContext.Request.UrlReferrer.Authority + Url.Action("Index", new { controller = "AnotherAction" } );
}
}
控制器是否被重用,可能会改变HttpContext.Request和Url的内容,或者这样就好了(除了不使用线程池)。
感谢您的信息!
答案 0 :(得分:0)
即使这是有效的并且现在工作正常,但它似乎有风险。 API和/或底层实现可能总是在将来的版本中更改,这可能会导致此代码中断。
更好的做法是在生成SomeAction
时将任何所需数据传递给新线程。例如,使用Passing Parameters to Threads中展示的ParameterizedThreadStart
。