Async/Await执行顺序问题

yz1311 2015-11-24 04:09:42
private void NN()
{
Test();
Console.WriteLine("NN");

}

async void Test()
{
await LoadData ();
Console.WriteLine("Test");

}


async Task<string> LoadData()
{
return await Task.Run (()=>{
Task.Delay(6000).Wait();
Console.WriteLine("LoadData In");
return "";
});
}


执行结果:
NN
LoadData In
Test


跟我想象的不一样
为什么调用Test()方法后,不等待Test()方法执行完成,就继续向下执行了?
...全文
349 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
await内部是一次执行,但因为你的声明async void Test(),所以在调用Test方法时,这里不会等待,内部有await关键字,那段会进行等待
yz1311 2015-11-24
  • 打赏
  • 举报
回复
引用 2 楼 starfd 的回复:
是await内部会等待,改成下面的就等待了
private async static void NN()
{
    await Test();
    Console.WriteLine("NN");
}
static async Task Test()
{
    var d = await LoadData();
    Console.WriteLine(d);
    Console.WriteLine("Test");
}
static async Task<string> LoadData()
{
    return await Task.Run(() =>
    {
        Task.Delay(6000).Wait();
        Console.WriteLine("LoadData In");
        return "LoadData";
    });
}
是不是同步调用Test(),如果里面没有await关键字,这个方法就同步执行; 如果var d = await LoadData();之前还有部分同步代码,前面的依旧是同步执行,在var d = await LoadData();这里马上就变成异步执行了,此时调用Test();后面的代码(Console.WriteLine("NN");)也立马可以执行了 感觉好像是await的Task及之后的代码整体上全部是异步执行了( await Test(); Console.WriteLine("NN"); ), 而不是我想的整个方法里面一次顺序执行. 请问,大概是这样吗?
  • 打赏
  • 举报
回复
或者你把
private async static void NN()
{
    await Test();
    Console.WriteLine("NN");
}
改成
private static void NN()
{
    Test();
    Console.WriteLine("NN");
}
这时候VS会给你提示的
  • 打赏
  • 举报
回复
是await内部会等待,改成下面的就等待了
private async static void NN()
{
    await Test();
    Console.WriteLine("NN");
}
static async Task Test()
{
    var d = await LoadData();
    Console.WriteLine(d);
    Console.WriteLine("Test");
}
static async Task<string> LoadData()
{
    return await Task.Run(() =>
    {
        Task.Delay(6000).Wait();
        Console.WriteLine("LoadData In");
        return "LoadData";
    });
}

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧