C#&.NET,.NET Core程序Task.Run执行子线程async/await异步问题?
1.74K 次浏览
以下是基于.NET 7的控制台应用程序代码片段:
Console.WriteLine("主线程开始执行");
var task = Task.Run(MyMethod);
task.ContinueWith(_ =>
{
Console.WriteLine("子线程完成");
});
Console.WriteLine("主线程继续执行...");
Console.ReadKey();
static async Task GetDataAsync()
{
await Task.Delay(3000);
return 56;
}
static async Task MyMethod()
{
Console.WriteLine("开始执行...");
var result =await GetDataAsync();
Console.WriteLine($"异步方法完成,结果为:{result}");
}
以上代码片段是关于C#&.NET使用Task.Run()
执行子线程的async
,await
异步方法。请问输出的结果依次是什么呢?
1 个回答
-
题目中代码片段的执行结果依次输出如下:
主线程开始执行 主线程继续执行... 开始执行... 异步方法完成,结果为:56 子线程完成
解释如下:
首先,在主线程中调用
Task.Run(MyMethod)
方法启动一个新的任务,并在该任务中执行MyMethod
方法。然后,主线程继续执行,并输出 “主线程继续执行…”。接着,在新的任务中,
MyMethod
方法开始执行,输出 “开始执行…”。在该方法中,调用了异步方法GetDataAsync
,并使用await
等待其完成。由于GetDataAsync
方法会等待 3 秒钟后返回结果,因此MyMethod
方法会在等待期间暂停执行。当
GetDataAsync
方法完成后,MyMethod
方法会恢复执行,并输出结果 “异步方法完成,结果为:56”。然后,新的任务完成,并输出 “子线程完成”。最后,在主线程中,调用
Console.ReadKey
方法等待用户按下任意键后结束程序。