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() 是安全的,这当然取决于访问的其他数据。

  • 实例化单个 Foo 对象以运行每个 Biz 对象是否更好(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 回答