【发布时间】:2021-07-23 11:31:46
【问题描述】:
当遇到等待时,控制权返回给调用者,而等待的任务在后台运行(发出/等待网络请求/响应)。我知道等待任务在等待网络响应时不需要线程,因为它实际上并没有运行任何东西,只是在等待。
我想问一下-假设在awaited函数中,有一些像Console.WriteLine这样的同步代码,那么因为控制权已经回到了调用者,谁来执行console.writeline?
假设按钮点击事件发生await Fn1();。
示例 1:
async Task<string> fn1() {
string result = await NetworkCallAsync('http......');
return result;
}
在上面的例子中遇到await Fn1(),控制权回到UI线程,同时进行网络调用。我明白这一点。当网络调用完成后,Ui 线程将执行剩下的代码。那就是 - 获取结果并返回。
示例 2:
async Task<string> fn1() {
Console.WriteLine("hello"); //or any other synchronous code like Thread.Sleep(10);
string result = await NetworkCallAsync('http......');
return result;
}
在上面的代码中,当按钮点击遇到await Fn1()并且已经将控制权返回给UI线程,那么谁执行Console.WriteLine(或Thread.Sleep(10))如上例所示)?
【问题讨论】:
-
Function fn1() {
标签: c# async-await