2017-02-19 65 views
1

我正在學習任務基於aysny的編程,無法使此代碼工作。控制檯僅打印一次消息,然後消失。console.writeline內任務不工作

如果我刪除了讀取線並運行程序(而不是調試模式),控制檯就會出現消息說按一個鍵繼續。當我調試並將調試器放在console.write中時,它會在一段時間內正常工作,然後控制檯窗口消失並重新啓動。如果我使用循環< 10000而不是while,那麼行爲也是一樣的

請問你能提出我在做什麼錯了。

static void Main(string[] args) 
     { 
      multitasker(); 

     } 

     static async void multitasker() 
     { 
      Task task1 = new Task(PrintMessageA); 
      task1.Start(); 
      await task1;    
     } 

     static void PrintMessageA() 
     { 
      while(true) 
      { 
       Console.WriteLine("Message from A"); 
       Console.ReadLine(); 

      } 
     } 

回答

2

您的主線程不會阻止,因此會立即退出。在某種意義上,你必須「一路等待」,並等待multitasker,但是你不能像後面看到的那樣做。

所以首先你multitasker

static async Task multitasker() 
{ 
    Task task1 = new Task(PrintMessageA); 
    task1.Start(); 
    await task1;    
} 

返回任務的問題是你不能讓Main()(入口點)異步,因此,你需要通過在返回的任務,而不是調用Wait()阻止該線程

static void Main(string[] args) 
{ 
    multitasker().Wait(); 
} 
+0

非常感謝。這就說得通了 – kimi86