控制器和线程

时间:2010-04-05 17:13:35

标签: asp.net-mvc multithreading thread-safety

我在项目中看到这段代码,我想知道它是否安全:

(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的内容,或者这样就好了(除了不使用线程池)。

感谢您的信息!

1 个答案:

答案 0 :(得分:0)

即使这是有效的并且现在工作正常,但它似乎有风险。 API和/或底层实现可能总是在将来的版本中更改,这可能会导致此代码中断。

更好的做法是在生成SomeAction时将任何所需数据传递给新线程。例如,使用Passing Parameters to Threads中展示的ParameterizedThreadStart