首页 / 问答 / C#&.NET,.NET Core程序Task.Run执行子线程async/await异步问题?

C#&.NET,.NET Core程序Task.Run执行子线程async/await异步问题?

0

以下是基于.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 个回答

  • 0

    题目中代码片段的执行结果依次输出如下:

    主线程开始执行
    主线程继续执行...
    开始执行...
    异步方法完成,结果为:56
    子线程完成
    

    解释如下:

    首先,在主线程中调用Task.Run(MyMethod)方法启动一个新的任务,并在该任务中执行MyMethod方法。然后,主线程继续执行,并输出 “主线程继续执行…”。

    接着,在新的任务中,MyMethod 方法开始执行,输出 “开始执行…”。在该方法中,调用了异步方法 GetDataAsync,并使用 await 等待其完成。由于 GetDataAsync 方法会等待 3 秒钟后返回结果,因此 MyMethod 方法会在等待期间暂停执行。

    GetDataAsync 方法完成后,MyMethod 方法会恢复执行,并输出结果 “异步方法完成,结果为:56”。然后,新的任务完成,并输出 “子线程完成”。

    最后,在主线程中,调用 Console.ReadKey 方法等待用户按下任意键后结束程序。

    Rector的个人主页

    Rector

    2023-03-11 回答

    我来回答