我有一个Web服务和一些方法,我不想在下面使用这个代码,这很好用,因为我打算在多线程应用程序中使用它,其中static(我已经读过)不是线程安全的。
所以,我现在所做的只是重复下面的静态方法'returnisTrue()'中的代码,在我的Web服务方法“myWebMethod”的主体中,在第1个点// 1,// 2的3和3的3。这工作正常,但导致膨胀的代码。是否有更紧凑的方式,使用函数式编程或匿名方法或我可以使用的是什么?
注意当我尝试在方法中创建一个类时,编译器会被阻塞...这可以解决我的问题。
正如我所说,我现在的代码工作得很好,但它很臃肿,因为我重复了'静态'方法'returnisTrue'三次。
谢谢。
编辑:回答有关使我的静态方法线程安全的一些问题,我宁愿不打扰,但为了获得我在下面包含的解决方案。
所有这些代码都是Web服务中的服务器端
// I cannot unfortunately use this static method below--not thread safe
static private bool returnisTrue()
{
bool isTrue = false;
// do a bunch of stuff here
return isTrue;
}
public bool myWebMethod (string XYZ)
{
//public Class myClassReturnisTrue { … } //will not compile
bool isTrueOrNot1 = returnisTrue(); //1 of 3
/// more code here
bool isTrueOrNot2 = returnisTrue(); //2 of 3
///more code here
bool isTrueOrNot3 = returnisTrue(); //3 of 3
return isTrueOrNot1 && isTrueOrNot2 && isTrueOrNot3;
}
// here is the static method 'returnisTrue' it looks something like this:
static private bool returnIsTrue(string A, string B)
{
if (A.Length() < B.Length())
{
return true;
}
else
return false;
}
答案 0 :(得分:3)
你在静态方法中实际做了什么?您是在修改任何全局状态还是只处理局部变量?使用静态方法甚至变量没有任何问题,只要您采取适当的措施以确保您的代码实际上是线程安全的。
静态方法和实例方法都可能不安全,具体取决于您在其中执行的操作。要问的主要问题是,您是否正在访问方法中多个线程之间可访问的任何数据?如果是这样,为什么不将您的方法更改为线程安全(例如通过锁定)。
以.NET框架本身为例,它包含各种静态线程安全方法。
修改:
好的,现在我们已经看到了你的方法 - 它确实已经是线程安全的了。该方法不访问任何共享数据,字符串为immutable and inherently thread-safe as a result。
答案 1 :(得分:1)
如果你lock
有关键部分(你可能想在msdn上查找 - &http://msdn.microsoft.com/en-us/library/c5kehkcz.aspx),你应该能够使用静态方法