2017-07-17 18 views
0

タスクコンテキスト自体の何らかのフラグがトリガされるまでタスクを待機させる方法はありますか?主な機能には上の待っているタスクがSomeTask()関数から返さC#タスクを終了する前にイベントが解決するのを待つ

class SomeClass 
{ 
    public event Action SomeEvent; 

    public void triggerEventIn1Sec() 
    { 
     Task.Run(() => 
     { 
      System.Threading.Thread.Sleep(1000); 
      SomeEvent.Invoke(); 
     }); 
    } 
} 

class Program 
{ 

    static void Main(string[] args) 
    { 
     Task mtask1 = SomeTask(); 
     mtask1.Wait(); 
     Console.WriteLine("Task1 completed"); 
     Console.ReadLine(); 
    } 

    public static Task SomeTask() 
    { 
     return Task.Run(() => { 
      var c = new SomeClass(); 
      c.SomeEvent +=() => 
      { 
       Console.WriteLine("Some Event invoked"); 
      }; 
      c.triggerEventIn1Sec(); 
     }); 
    } 
} 

:たとえば、このコードを取ります。 SomeTaskタスクのイベントがトリガーされる前に、Waitが完了します。

は、イベントが「タスクを完了する」前にトリガされるまで待つために、このタスク機能

return Task.Run(() => { 
     var c = new SomeClass(); 
     c.SomeEvent +=() => 
     { 
      Console.WriteLine("Some Event invoked"); 
     }; 
     c.triggerEventIn1Sec(); 
    }); 

に指定する何らかの方法はありますか?

+0

ための可視だことを確認し、

while (true) { if (someflag) break while; } 

のようにフラグがtrueの場合壊れる無限ループを使用して、他の方法では、真のsomeflagを設定することができますタスクベースのプログラムを使用しているときの最初のイベントですか? 'triggerEventIn1Sec'は1秒後にイベントを発生させるのではなく、1秒後に完了する' Task'を返してください。 – Servy

+0

@Servy私は別の無関係のものをやって複数の仕事をしたい。これらの非同期タスクのいずれも、メッセージブローカーにメッセージをプッシュして応答を待つことができます。レスポンスは、必要なイベントであり、受信するイベントハンドラです。メッセージブローカからの応答が得られるか、または例外がスローされるまで、タスクは完了できません – tt9

答えて

-1

あなたはそれがなぜあなたは使用している両方の方法

関連する問題