Fil*_*lho 1 multithreading task c#-4.0
我有以下代码,用于测试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);
}
Run Code Online (Sandbox Code Playgroud)
我的输出如下:
一个
B.
我究竟做错了什么?提前致谢.
您正在运行的方法AsyncA和AsyncB同步.如果您正在使用async,则需要await完成任务.将您的方法更改为
static async Task<string> AsyncA()
{
await Task.Delay(1500);
return "A";
}
static async Task<string> AsyncB()
{
await Task.Delay(430);
return "B";
}
Run Code Online (Sandbox Code Playgroud)
你会得到你期望的输出
B
A.
有关进一步参考,请查看MSDN示例
编辑:
为了完整起见,您还应该Print以相同的方式更改方法,否则它也会同步运行到现在为止.
因为在这个方法中你可以通过参数获得任务,你可以直接在Console.WriteLine方法中等待结果:
static async void Print(Task<string> str)
{
Console.WriteLine(await str);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
63 次 |
| 最近记录: |