gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 12:49:33 25 4
gpt4 key购买 nike

我需要在 Download.file 方法完成时调用 Join 方法。我尝试添加 await 关键字但没有用

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);
}
}
}

谢谢

最佳答案

你应该让你的 file 方法(顺便说一句,这个名字不好 - 它可能应该类似于 DownloadFileAsync)返回 Task而不是 void

那你就可以等待了。

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

await Download.file(uri);

(当然,该方法不对内容做任何事情这一事实有点奇怪......)

您还应该考虑使用 HttpClientWebClient,它们都已提供此行为。

关于c# - 如何在线程中等待异步方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16623253/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com