我有以下静态类。 规则是自定义类型。请确认此方法对于变量 listToUpdate 是线程安全的,我将传递给每个生成静态函数的规则。
public static class RulesBO
{
public static List<Rule> GetRulesForTransaction(int transID)
{
List<Rule> toReturn = new List<Rule>();
GetRulesForSetA(transID,toReturn);
GetRulesForSetB(transID,toReturn);
}
public static void GetRulesForSetA(int transID, List<Rule> listToUpdate)
{
/*business logic and finally add/remove elements from listToUpdate*/
}
public static void GetRulesForSetB(int transID, List<Rule> listToUpdate)
{
/*business logic and finally add/remove elements from listToUpdate*/
}
}
感谢您的帮助
编辑: 将从ASP.NET调用RulesBO类。因此,对于每个会话,对于用户的transactionID,将调用GetRulesForTransaction方法以返回规则列表。
每个GetRulesForSetXYZ都会针对特定的transID进行数据库调用,得到一些值,做一些像&lt;&gt;这样的检查100,&gt; 1000等,然后向变量添加一个新的RULE实例。那些其他方法是私有的,只有第一种方法是公开的。
答案 0 :(得分:1)
既然你说过:
每个GetRulesForSetXYZ [...]都是私有的,只有第一个方法是公开的。
这意味着即使从几个不同的线程同时调用entry方法,这些调用中的每一个都有自己的列表。这些列表中的每一个都只能从一个线程访问(至少在它们返回之前),因此您没有任何多线程访问权限,因此不存在竞争条件。