2013-05-18 47 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,它们都具有此行为已可用。