2012-03-28 10 views
-1

私はそのようなコードを持っている:いくつかのタスクがどのようにソースを理解するために同じ代理人を呼び出すか?

public void RangeMissing(/*params*/) 
{ 
    Task.Factory.StartNew(() => 
    { 
     .... 
     bool needReceive = true; 
     while (needReceive) { 
      .... 
      lock (lockObj) { 
       .... 
       // calling third party dll method that calls MdrResponseInterpreter in its turn 
      } 
     } 
    } 
} 

public bool MdrResponseInterpreter(DNMessageDeliverer builder, DNFieldSet message) 
{ 
    ..... 
    // i need to update needReceive here 
    needReceive = false; 
} 

いくつかのタスクを同時に実行することができます。あなたがそれらをロックする場合は、ここで

lock (lockObj) { 

MdrResponseInterpreterメソッドの宣言は、それがインスタンスメソッドだことが明らかになったそうであるように私は同時に実行されませんMdrResponseInterpreter

答えて

0

複数のタスクからTask対応のneedReceive変数を更新する必要があります - 必要なものを受け取ってそのインスタンスをロックするだけです。

+0

複数のタスクを同時に実行したい。私は全体の仕事のほんの一部をロックします。 – javapowered

+0

OKだから、MdrResponseInterpreterメソッドを持つオブジェクトにneedReceiveを配置してください。 – Bond

+0

DNMessageDelivererにはMdrResponseInterpreterメソッドがありますが、いくつかのタスクでDNMessageDelivererを使用していますので、これは機能しません。私は他のタスクを更新します...しかし、私は "ロック(lockObj"これで動作するはずですが、私はちょうど 'DNMessageDeliverer'から' needReceive'を外部クラスにコピーする必要があります...しかし、私はそれが非常に良いアプローチである – javapowered

関連する問題