C# 有人能帮我理解c中的wait/async实现吗
当使用await的方法本身未被等待时,调用方法的执行将在被调用方法完成之前继续 我从这里得到了这种理解 我试图通过一个简单的程序来实现我对async/await的理解。 我将输出想象为:Finish将在CallMethodAsync完全执行之前打印,因为我使用await调用了两个单独的异步方法,但是它是同步运行的,好像根本没有实现async await一样 我想在完成CallMethodAsync的执行之前打印finish。让我知道我在哪里做错了什么 我看过其他关于StackOverflow的文章,但我想,我不能确切地理解async Wait是如何工作的C# 有人能帮我理解c中的wait/async实现吗,c#,async-await,C#,Async Await,当使用await的方法本身未被等待时,调用方法的执行将在被调用方法完成之前继续 我从这里得到了这种理解 我试图通过一个简单的程序来实现我对async/await的理解。 我将输出想象为:Finish将在CallMethodAsync完全执行之前打印,因为我使用await调用了两个单独的异步方法,但是它是同步运行的,好像根本没有实现async await一样 我想在完成CallMethodAsync的执行之前打印finish。让我知道我在哪里做错了什么 我看过其他关于StackOverflow的文
class Program
{
public static void Main(string[] args)
{
TestAsync a = new TestAsync();
a.CallMethodAync();
Console.WriteLine("Finish");
}
}
class TestAsync
{
public async Task Method1Async()
{
for(int i = 1; i <= 100; i++)
{
Console.WriteLine("Method 1: " + i);
}
}
public async Task Method2Async()
{
for (int i = 1; i <= 100; i++)
{
Console.WriteLine("Method 2: " + i);
}
}
public async Task<int> CallMethodAync()
{
Console.WriteLine("Before mehtod 1");
await Method1Async();
Console.WriteLine("After method 1. before method 2");
await Method2Async();
Console.WriteLine("after method 2");
return 1;
}
}
在编译代码时,您应该收到警告,提示您出了什么问题: 警告CS4014:由于未等待此调用,因此当前方法的执行将在调用完成之前继续。考虑将“Acess”运算符应用到调用的结果。< /P> 异步方法将同步运行,直到到达其等待的值尚未完成的第一个等待表达式 在您的情况下,所有异步方法都会返回已完成的任务—Method1Async和Method2Async只需同步运行,然后返回已完成的任务,这意味着CallMethodAsync将等待那些已完成的任务,而其自身也会同步完成
如果在Method1Async和Method2Async中添加类似Wait Task.Yield的内容,那么您将看到真正的异步行为:这些方法到达Task时将返回不完整的任务。Yield意味着CallMethodAsync本身将返回不完整的任务,等等。在等待任务之前,请尝试将任务存储在变量中,这样您就有机会观察它的属性,等等。var task=Method1Async;