gpt4 book ai didi

multithreading - 线程无法正常工作

转载 作者:行者123 更新时间:2023-12-03 13:14:12 25 4
gpt4 key购买 nike

我有以下代码,用于在C#上测试Task框架

  static void Main(string[] args)
{
Task<string> task1 = AsyncA();
task1.ContinueWith(Print);

Task<string> task2 = AsyncB();
task2.ContinueWith(Print);

Task.WaitAll(new Task[] {task1, task2});
}

static async Task<string> AsyncA()
{
Thread.Sleep(1500);
return "A";
}

static async Task<string> AsyncB()
{
Thread.Sleep(430);
return "B";
}

static async void Print(Task<string> str)
{
Console.WriteLine(str.Result);
}

我的输出如下:

A
B



我究竟做错了什么?
提前致谢。

最佳答案

您正在同步运行AsyncAAsyncB方法。如果您使用的是async,则需要在任务结束时使用await。将您的方法更改为

static async Task<string> AsyncA()
{
await Task.Delay(1500);
return "A";
}

static async Task<string> AsyncB()
{
await Task.Delay(430);
return "B";
}

您将获得预期的输出

B
A



为了进一步引用,请查看 the MSDN example

编辑:

为了完整起见,您还应该以相同的方式更改 Print方法,否则该方法到目前为止仍在同步运行。
由于在此方法中,您是通过参数获取任务的,因此实际上可以直接在 Console.WriteLine方法中等待结果:
static async void Print(Task<string> str)
{
Console.WriteLine(await str);
}

关于multithreading - 线程无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42933977/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com