如何在线程中等待异步方法?

时间:2013-05-18 10:31:26

标签: c# multithreading asynchronous

我需要在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);
        }
    }
}

由于

1 个答案:

答案 0 :(得分:5)

您应该使用file方法(顺便说一句,它应该是DownloadFileAsync),而不是Task。< / p>

然后你可以等待它。

但是,不清楚为什么你在另一个线程中启动它 - 不同步的一点是你需要启动一个新线程。从另一个异步方法,您可以使用:

void

(当然这个方法对内容没有做任何事情的事实有点奇怪......)

您还应该考虑使用await Download.file(uri); HttpClient,这两种行为都已经可用。