Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/31.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# HTTPListener和长时间运行作业_C#_Asp.net_Thread Safety_Httplistener - Fatal编程技术网

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亿个线程占用