2016-07-14 14 views
0

私はTPLについて学び始め、今質問があります。 私はTaskをコンストラクタ内で起動するWorkerクラスを持っています。これらのタスクを手動リセットイベントと同期させます。しかし、私はこれに関するいくつかの統計を取得したい。だから私はこの仕事の中でオブジェクトを埋もうとしました。いいアイデアですか?タスクの中にオブジェクトを埋め込む

public Worker(...) 
    { 
     ... 
     StatisticItem = new StatisticItem(); 
     .... 

     Task = Task.Factory.StartNew(() => 
     { 
      //Manual reset event 
      WaitForSignalToStart.WaitOne(); 
      while (source.IsMyTurn(RepeatOrder)) 
      { 
       Item item; 
       var realTimeWatch = new Stopwatch(); 
       while (TryGetNext(out item)) 
       { 
        ... 
        DoWork() 
        StatisticItem.PlanItemId =... 
        StatisticItem.CommandAndQueryName =... 
        StatisticItem.WokrerId = ... 
        StatisticItem.ThreadId = ... 
        StatisticItem.Date = ... 

       } 
     }, tokenSource.Token, TaskCreationOptions.LongRunning, TaskScheduler.Current); 
    } 

答えて

1

この特定のStatisticItemにアクセスするタスクが1つのみであれば、問題ありません。これは、lambaステートメントが作成されたコンテキストの変数を使用できるために有効です。

1

これは可能ですが、StatisticItemがフィールドの場合は、1つのタスクしかアクティブにできません。また、ロックすることをお勧めします。StatisticItem

+0

StatisticItemはプライベートセットのプロパティです。だからロックかノーが必要ですか? – TjDillashaw

+1

statisticsitemのインスタンスは問題ではありません。それはあなたが読み書きしようとしているStatisticsItemのプロパティについてです。同じオブジェクトインスタンスが両側で使用されている間は(gui/task)、オブジェクトをロックするために使用する必要があります。この場合、statisticsitemオブジェクトの使用は合理的な提案ですが、どのオブジェクトでもかまいません。 –

関連する問題