[英]C# HttpClient Async-Await - Unable to Guarantee 'A' Before 'B'
我正在尝试编写一个 C# 控制台应用程序,它使用 HttpClient 来抓取 web 页。 调用 FunctionOne 时,确保“A”先于“B”写入控制台的最佳方法是什么? 每当我运行我的代码时,“B”总是写在“A”之前。 先谢谢您的帮助!
public class MyClass
{
public void FunctionOne(string url)
{
FunctionTwoAsync(url);
Console.WriteLine("B");
}
private async void FunctionTwoAsync(string url)
{
var httpClient = new HttpClient();
var htmlContent = await httpClient.GetStringAsync(url);
var htmlDocument = new HtmlDocument();
htmlDocument.LoadHtml(htmlContent);
Console.WriteLine("A");
}
}
您的FunctionTwoAsync
方法是一种async
方法,这意味着该方法是异步的。
当您需要 methode 的结果或需要此方法完成时,您必须对async
方法使用await
关键字
因此,像这样更改您的代码:
public class MyClass {
public async Task FunctionOne(string url)
{
await FunctionTwoAsync(url);
Console.WriteLine("B");
}
private async Task FunctionTwoAsync(string url)
{
var httpClient = new HttpClient();
var htmlContent = await httpClient.GetStringAsync(url);
var htmlDocument = new HtmlDocument();
htmlDocument.LoadHtml(htmlContent);
Console.WriteLine("A");
}
}
要在 B 之前创建 A,您需要等待 FunctionTwoAsync 并使 FunctionOne 成为异步 function
public async void FunctionOne(string url)
{
await FunctionTwoAsync(url);
Console.WriteLine("B");
}
您应该使 FunctionOne 也异步并等待第二个 function 的执行:
public class MyClass
{
public async Task FunctionOne(string url)
{
await FunctionTwoAsync(url);
Console.WriteLine("B");
}
private async Task FunctionTwoAsync(string url)
{
var httpClient = new HttpClient();
var htmlContent = await httpClient.GetStringAsync(url);
var htmlDocument = new HtmlDocument();
htmlDocument.LoadHtml(htmlContent);
Console.WriteLine("A");
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.