如何使用匿名方法或匿名类型减少此代码?

时间:2011-11-29 12:48:33

标签: c# static thread-safety anonymous-methods

我有一个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;

 }

2 个答案:

答案 0 :(得分:3)

你在静态方法中实际做了什么?您是在修改任何全局状态还是只处理局部变量?使用静态方法甚至变量没有任何问题,只要您采取适当的措施以确保您的代码实际上是线程安全的。

静态方法和实例方法都可能不安全,具体取决于您在其中执行的操作。要问的主要问题是,您是否正在访问方法中多个线程之间可访问的任何数据?如果是这样,为什么不将您的方法更改为线程安全(例如通过锁定)。

以.NET框架本身为例,它包含各种静态线程安全方法。

修改:

好的,现在我们已经看到了你的方法 - 它确实已经是线程安全的了。该方法不访问任何共享数据,字符串为immutable and inherently thread-safe as a result

答案 1 :(得分:1)

如果你lock有关键部分(你可能想在msdn上查找 - &http://msdn.microsoft.com/en-us/library/c5kehkcz.aspx),你应该能够使用静态方法