-3

次の静的クラスがあります。ルールはカスタム タイプです。このアプローチが、変数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*/

    }
}

ご協力ありがとうございました

編集: クラス RulesBO は ASP.NET から呼び出されます。したがって、セッションごとに、ユーザーのトランザクション ID に対して、GetRulesForTransaction メソッドが呼び出され、ルールのリストが返されます。

各 GetRulesForSetXYZ は、特定の transID に対して DB 呼び出しを行い、値を取得し、<> 100、> 1000 などのチェックを実行してから、新しい RULE インスタンスを変数に追加します。これらの他のメソッドはプライベートになり、最初のメソッドのみがパブリックになります。

4

1 に答える 1

1

あなたが述べたので:

各 GetRulesForSetXYZ [...] はプライベートになり、最初のメソッドのみがパブリックになります。

これは、エントリ メソッドが複数の異なるスレッドから同時に呼び出された場合でも、これらの呼び出しのそれぞれに独自のリストがあることを意味します。これらの各リストは、(少なくとも返されるまで) 単一のスレッドからのみアクセスされるため、同期するためのマルチスレッド アクセスがないため、競合状態が発生する可能性はありません。

于 2013-05-10T17:42:13.537 に答える