C# HttpClient Async-Await - 无法保证 'A' 在 'B' 之前
C# HttpClient Async-Await - Unable to Guarantee 'A' Before 'B'
我正在尝试编写一个使用 HttpClient 抓取网页的 C# 控制台应用程序。调用 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");
}
}
要在 B 之前创建 A,您需要等待 FunctionTwoAsync 并将 FunctionOne 设置为异步函数
public async void FunctionOne(string url)
{
await FunctionTwoAsync(url);
Console.WriteLine("B");
}
你的FunctionTwoAsync
方法是一个async
方法,这意味着这个方法是异步的。
当您需要方法的结果或需要此方法完成时,您必须使用 await
关键字用于 async
方法
所以,像这样更改您的代码:
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");
}
}
您应该使 FunctionOne 也异步并等待第二个函数的执行:
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");
}
}
我正在尝试编写一个使用 HttpClient 抓取网页的 C# 控制台应用程序。调用 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");
}
}
要在 B 之前创建 A,您需要等待 FunctionTwoAsync 并将 FunctionOne 设置为异步函数
public async void FunctionOne(string url)
{
await FunctionTwoAsync(url);
Console.WriteLine("B");
}
你的FunctionTwoAsync
方法是一个async
方法,这意味着这个方法是异步的。
当您需要方法的结果或需要此方法完成时,您必须使用 await
关键字用于 async
方法
所以,像这样更改您的代码:
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");
}
}
您应该使 FunctionOne 也异步并等待第二个函数的执行:
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");
}
}