2014-07-22 28 views
2

我寫了一個測試應用程序來幫助我理解await/async。我有一個方法MethodAsync1(),它工作正常。但是,當我從Main()調用它時,我無法弄清楚如何等待MethodAsync1()完成。見下面的代碼。如何在Main中使用await

class Program 
    { 
     static void Main(string[] args) 
     { 
      Debug.WriteLine(DateTime.Now + " Main()1"); 
      Task<String> v1 = MethodAsync1(); 
      Debug.WriteLine(DateTime.Now + " Main()2 - prints out before Method1 finishes"); 

      // I now want to wait for MethosAsync1() to complete before I go further. 
      // This line has error: 
      // Error 1 The 'await' operator can only be used within an async 
      // method. Consider marking this method with the 'async' modifier and 
      // changing its return type to 'Task'. 
      String v2 = await v1; 

      Debug.WriteLine(DateTime.Now + " Main()3 - Method1() now finished"); 
     } 



     static async Task<String> MethodAsync1() 
     { 
      Debug.WriteLine(DateTime.Now + " Method1()1 "); 

      HttpClient client = new HttpClient(); 
      Task<HttpResponseMessage> responseTask = client.GetAsync("http://bbc.co.uk"); 

      // Do other stuff 
      Debug.WriteLine(DateTime.Now + " Method1()2 "); 

      // Wait for it to finish - yield thread back to Main() 
      var response= await responseTask; 

      // responseTask has completed - so thread goes back here and method returns fully 
      Debug.WriteLine(DateTime.Now + " Method1()3 "); 

      return "finished"; 
     } 
    } 
+0

你可以讓'main'成爲'async'方法嗎? – StriplingWarrior

+0

不,它不會讓我這樣說:''await1.Program.Main(string [])':一個入口點不能用'async'修飾符標記 ' – spiderplant0

+0

爲什麼'main'是異步的?這是沒有意義的。只要阻止其線程,直到獲得結果。 – poke

回答

0

我不認爲這是可能的主要方法。除此之外,它只是一個簽名。在這個特定情況下,我將使用任務的Result屬性來阻塞,直到給出結果。

+0

謝謝你我會閱讀'Result' – spiderplant0