【发布时间】:2015-03-13 10:17:48
【问题描述】:
在从 IIS 运行的 WCF 中,我有这段代码(类似的东西)。
public static class Test
{
public static int Method(int x, int y)
{
int p = 10;
int r = p * x * y;
return r;
}
}
理论上,这个方法可以同时从来自 100 万个不同用户的 100 万个请求中调用。
我与一位同事进行了一次参数讨论,我的观点是此方法调用的每个实例都是独立的,并且永远不会导致调用之间的数据损坏。此线程支持此功能:C# : What if a static method is called from multiple threads?
然而,我的同事声称 IIS 和 WCF 是一种特殊的怪物,可以在各种奇怪的地方缓存和启动/停止调用,因此实际上这些调用实际上可以相互干扰。
他举的例子是,如果一个调用在方法内部,而另一个调用带有新参数,那么int x 和int y 参数变量值可能会被替换为已经进行的调用。
他的立场是永远不要在任何与 IIS / WCF 相关的东西中使用 static 方法/类。
我找不到任何支持这两种情况的可靠文档,有人愿意为此抛出一些很好的文档参数吗?
【问题讨论】:
-
可能他们将线程安全问题与单例是否是您网站使用的唯一实例的问题混淆了。我认为他们关于不在网站中使用单例模式的一般规则是正确的。即使其他一切正常,考虑一个网络农场