C# HTTPListener和长时间运行作业
我已经用C# HTTPListener和长时间运行作业,c#,asp.net,thread-safety,httplistener,C#,Asp.net,Thread Safety,Httplistener,我已经用HttpListener创建了一个web服务,用于一些需要长时间运行的作业的请求,这些作业可能需要10分钟。因此,我执行以下操作并从服务器返回: var task = Task.Factory.StartNew(() => ImportDocuments(), TaskCreationOptions.LongRunning); CreateResponse(context.Response, "started"); 这是否保证从服务器返回并启动新线程以完成任务,或者我必须使用进程
HttpListener
创建了一个web服务,用于一些需要长时间运行的作业的请求,这些作业可能需要10分钟。因此,我执行以下操作并从服务器返回:
var task = Task.Factory.StartNew(() => ImportDocuments(), TaskCreationOptions.LongRunning);
CreateResponse(context.Response, "started");
这是否保证从服务器返回并启动新线程以完成任务,或者我必须使用
进程。启动?我没有使用Process.Start,因为我必须实现一个独立于windows应用程序的应用程序。您肯定不必使用Process.Start
我还没有找到任何保证,使用TaskCreationOptions.longlunning
总是在独立于线程池的新线程上启动任务,但其含义就是这样的。问题是:
向计划程序提供一个提示,提示该任务可能需要一个额外的线程,以便它不会阻止本地队列上其他线程或工作项的前进
但接着指出:
通过使用此选项,可以完全避免线程池,包括全局和本地队列
暗示还是保证?我相当肯定这是有保证的,但这只是一个意见,在我看来,文件并没有明确支持这一点
使用反编译器进行少量的工作将告诉您真相
如果你仍然不开心,那么:
new Thread(() => {
//my long running code
}).Start();
将绝对保证长时间运行的工作不会耗尽您的线程池。只要确保你的CPU不会被10亿个线程占用