我们的 WCF 服务引用的库之一使用 ThreadStatic 变量。服务方法在每次调用开始时设置它的值。我想知道这是否安全——换句话说,我们能否保证只有一个线程专门用于整个调用?或者是否有可能调用可以在一个工作线程上开始并在另一个工作线程上完成?或者是否可以将工作线程交换到不同的方法调用,然后再返回?
我们使用默认的 ConcurrencyMode.Single 和 InstanceContextMode.PerSession。
编辑
到目前为止我能找到的唯一信息是这篇博文,其中指出一个调用可以由多个线程处理:
这个人是对的吗? Microsoft 是否提供任何权威信息?
最佳答案
如果你不确定你总是可以使用 CallContext 类: CallContext.LogicalSetData CallContext.LogicalGetData
虽然如果线程发生变化,ThreadStatic 将无法工作,但 Logical CallContext 会在 .NET 中传递,即使您创建自己的新线程/任务也是如此。
关于wcf - ThreadStatic - WCF 方法调用是否只在单个线程上执行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13262979/