2017-07-17 54 views
0

有沒有辦法讓任務等待,直到Task上下文中的某種標誌被觸發?以此代碼爲例:在結束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()函數返回的任務在Main函數中等待。在SomeTask任務觸發事件之前,等待完成。

有什麼方法在此任務功能

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

指定要等到事件已經「完成任務」之前被觸發?

+0

當您使用基於任務的程序時,首先發生的事件?只需要'triggerEventIn1Sec'返回一個'任務',該任務將在1秒後完成,而不是在1秒內觸發一個事件。 – Servy

+0

@Servy我想要有多個任務做不同的不相關的事情。這些異步任務中的任何一個都可以將消息推送到消息傳遞者並等待響應,響應是需要和事件處理器接收的事件。直到我們收到來自消息代理的響應或拋出異常,任務才能完成 – tt9

回答

-1

您可以使用無限循環,打破如果標誌等於事實,因爲在

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

,並設置someflag真正在你的另一種方法,確保它是可見的你爲什麼要使用這兩種方法

相關問題