2013-05-18 68 views
2

我需要在Download.file方法完成時調用Join方法。 我嘗試添加等待關鍵字,但它沒有工作如何在一個線程中等待異步方法?

Thread myThread = new Thread(new ThreadStart(()=> await Download.file(uri))); 
Thread myThread = new Thread(new ThreadStart(()=>Download.file(uri))); 
myThread.Start(); 
myThread.Join(); 

class Download{  
    public static async void file(string url) 
    { 
     try 
     { 
      HttpWebRequest request; 
      HttpWebResponse webResponse = null; 
      request = HttpWebRequest.CreateHttp(url); 
      request.AllowReadStreamBuffering = true; 
      webResponse = await request.GetResponseAsync() as HttpWebResponse; 
      Stream responseStream = webResponse.GetResponseStream(); 
      using (StreamReader reader = new StreamReader(responseStream)) 
      { 
       string content = await reader.ReadToEndAsync(); 
      } 
      webResponse.Close(); 
     } 
     catch (Exception ex) { 
      Debug.WriteLine(ex.Message); 
     } 
    } 
} 

感謝

回答

5

你應該讓你的file方法(這是嚴重命名,順便說一句 - 這大概應該是這樣的DownloadFileAsync )返回Task而不是void

然後你可以等待它。

但是,目前還不清楚爲什麼你會在不同的線程反正開始本 - 異步的一點是,你需要啓動一個新的線程。從另一個異步方法,你可以用:

await Download.file(uri); 

(當然,實際上,該方法是不是做與內容什麼是有點怪......)

你也應該考慮使用HttpClientWebClient,它們都具有此行爲已可用。