我可能只是在做一些愚蠢的事情,但是我花了很长时间试图使这段代码起作用。我正在从数据库中读取内容,然后遍历查询结果,并对每个结果发出一个http请求。在我请求的url中,我正在执行一些可能耗时的任务,并且我希望while循环要等到http请求完成后才能继续循环并调用下一个。这是我到目前为止的内容,但它不是在等待请求完成。我知道不是因为我在url中打了3秒钟的睡眠...所以我应该看到我的应用程序输出中反映出的暂停。
using (SqlDataReader reader = dbCommand.ExecuteReader()) {
while (reader.Read()) {
Console.WriteLine("call http");
var result = executeReport(getRequestUrl(reader["report_id"].ToString()));
result.Wait();
Console.WriteLine("finish http");
}
}
static async Task executeReport(string requestUrl) {
WebResponse response = await WebRequest
.Create(requestUrl)
.GetResponseAsync()
.ConfigureAwait(false);
}
如果要等待异步操作返回以继续执行代码,则应通过非异步GetResponse()函数在同一线程上运行它。
这是关于该主题的一些基本读物:https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/concepts/async/