1

マルチスレッド ビジネス ロジックで次のコードを実行しています。

using System;
using System.Threading.Tasks;

namespace Test
{
    class Program
    {
        static void Main(string[] args)
        {
            var biz1 = new Biz { Some = 1, Value = "a" };
            var biz2 = new Biz { Some = 2, Value = "b" };
            var foo = new Foo();

            //thread 1
            new Task(() => foo.Run(biz1)).Start();
            //thread 2
            new Task(() => foo.Run(biz2)).Start();
            //more threads here for other Biz objects....

            Console.Read();
        }
    }

    public class Biz
    {
        public int Some { get; set; }
        public string Value { get; set; }
    }

    public class Foo
    {
        public void Run(Biz biz)
        {
            //base on the biz object do some task here

        }
    }
}

オブジェクトは、bizスレッド化中にいつでも変更されていません

質問:

  • foo.Runスレッドセーフですか?
  • 個々のオブジェクトをインスタンス化して各Fooオブジェクトを実行する方がよいでしょうかBiz(Run内の唯一の関数ですFoo)。
4

1 に答える 1

1
  • foo.Run はスレッドセーフですか?

あなたの Foo.Run() は安全であるように聞こえますが、もちろん他のデータがアクセスされるかどうかによって異なります。

  • 各 Biz オブジェクトを実行するために個々の Foo オブジェクトをインスタンス化する方がよいでしょうか (Run は Foo 内の唯一の関数です)。

それが安全であると仮定すると、つまり Foo のインスタンス データを使用しないRun()場合static、これは、少なくとも読者により良いメッセージを伝えるでしょう。

public static class Foo
{
    public static void Run(Biz biz)
    {
        //base on the biz object do some task here

    }
}
于 2013-03-18T09:34:18.750 に答える