2013-03-18 2 views
1

Я следующий код запущен в Многопоточности бизнес-логике:Параллелизма в .net для функции

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)?
+3

Хорошо, что 'Foo' меняется на' Run'? –

+0

Невозможно сказать, если foo.Run является потокобезопасным, если мы не знаем, что он на самом деле делает – ken2k

+0

@Jon Skeet, 'Foo' НЕ изменяется с помощью' Run' – James

ответ

1
  • Является ли foo.Run поточно?

Это звучит как Foo.Run() является безопасным, это зависит от того, что других данных доступен конечно.

  • Лучше ли экземпляр отдельного объекта Foo для запуска каждого объекта Биз (Запускать является единственной функцией в Foo)?

Предполагая, что это безопасно, то есть он не использует какие-либо данные экземпляра Foo, Run() может и должна быть static. Это, по крайней мере, передало бы читателю лучшее сообщение.

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

    } 
} 
Смежные вопросы