Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.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
Multithreading 销毁wcf线程_Multithreading_Wcf - Fatal编程技术网

Multithreading 销毁wcf线程

Multithreading 销毁wcf线程,multithreading,wcf,Multithreading,Wcf,我使用的是多线程wcf maxConcurrentCalls=10。通过记录对我的服务的调用,我看到10个不同的线程正在我的服务类中执行,并且它们在下面的调用中被重用 我可以告诉WCF销毁/删除一个线程,以便它在下次调用时创建一个新线程吗 这是因为我有线程静态状态,有时我希望被清除(在意外的异常情况下)。我正在使用线程静态作用域来提高性能。WCF不会创建新线程。它使用线程池中的线程来服务请求。因此,当一个请求开始时,它会从这个池中抽取一个线程来执行该请求,并在完成后将该线程返回到池中。WCF在下

我使用的是多线程wcf maxConcurrentCalls=10。通过记录对我的服务的调用,我看到10个不同的线程正在我的服务类中执行,并且它们在下面的调用中被重用

我可以告诉WCF销毁/删除一个线程,以便它在下次调用时创建一个新线程吗


这是因为我有线程静态状态,有时我希望被清除(在意外的异常情况下)。我正在使用线程静态作用域来提高性能。

WCF不会创建新线程。它使用线程池中的线程来服务请求。因此,当一个请求开始时,它会从这个池中抽取一个线程来执行该请求,并在完成后将该线程返回到池中。WCF在下面使用线程的方式是一个不应该依赖的实现细节。永远不要在ASP.NET/WCF中使用线程静态来存储状态

在ASP.NET中,您应该使用
HttpContext.Items
和WCF
OperationContext
来存储整个请求中可用的某些状态


这里有一个例子,你可以看一下,它演示了一种很好的抽象方法。

这不是asp.netscenario@Stig,是的,这是一个WCF场景。类似的规则:在无法控制线程的情况下,不要使用线程静态。按照我的建议使用OperationContext。实际上,我正在使用Structuremap在线程静态作用域中提供实例。@Stig,那么你不应该这样做。您应该使用请求范围。这篇文章可能很有用:每个线程的作用域不应该在ASP.NET或WCF中使用。在不手动控制线程的情况下使用ThreadStatic是一种糟糕的设计。