我最近遇到了一些包含在http post方法中的代码,该方法调用一个启动新的长期运行线程的方法。线程代码在类级别引用变量,并在类中调用其他私有方法。基本结构如下。这是有效的设置,还是post方法中的Task.Run会更好?如果newThread在类级别引用变量,这会带来任何危险吗?那些在此级别有更多经验的人的其他建议将不胜感激。
public class ApiController1 : ApiController
{
private string _s1;
private string _s2;
private int _i1;
//etc...
public HttpResponseMessage Post([FromBody]RequestInput request)
{
LongRunningMethod(request);
return Request.CreateResponse(HttpStatusCode.OK);
}
private void LongRunningMethod(RequestInput request)
{
var newthread = new Thread(() =>
{
try
{
//long running process
// references class-level variables (_s1, _s2, etc.)
// calls other private methods in the class
Method1();
// starts other tasks
taskList.Add(new Task...etc.)
Task.WaitAll(taskList);
// etc.
// etc.
// etc.
}
catch (Exception ex)
{ }
};
newthread.Start();
}
private void Method1()
{
}
}