async await的教程:https://www.cnblogs.com/zhaoshujie/p/11192036.html
异步方法:
private async Task<string> TestAsync() { Console.WriteLine("异步方法开始"); var task = Task.Run(() => { Thread.Sleep(2000); Console.WriteLine("在新线程中"); return "新线程结束"; }); var result = await task; Console.WriteLine("异步方法结束"); return result; }
调用时不使用await
public IActionResult Index() { Console.WriteLine("主线程开始"); Console.WriteLine("输出结果:" + TestAsync()); Console.WriteLine("主线程结束"); }
结果:
1、主线程+异步方法内await之前的代码按顺序执行
2、await开始(开新线程)
3、主线程剩余代码执行,Console.WriteLine("输出结果:" + TestAsync());拿不到TestAsync()的值
4、await结束后,异步方法await后的代码继续执行
调用时使用await
扫描二维码关注公众号,回复:
7640794 查看本文章
public async Task<IActionResult> Index() { Console.WriteLine("主线程开始"); Console.WriteLine("输出结果:" + await TestAsync()); Console.WriteLine("主线程结束"); }
结果:
全部按顺序执行,可以正确拿到返回值