C# 多线程

洛洛洛小晴 2020-06-12 10:18:19
为什么Console.WriteLine(a.Result[i])无法输出呢?确认已经进入到循环, Console.WriteLine(i.ToString()) ,会执行一次然后就断点到达Console.WriteLine(a.Result[i]) 就不再动了

 static void Main(string[] args)
{

Task<string> t1 = new Task<string>(() => Test1(500, "One"));
Task<string> t2= new Task<string>(() => Test1(300, "Two"));
Task<string[]> a = Task.WhenAll(t1, t2);
Console.WriteLine("aa");

for (int i=0;i<2;i++)
{
Console.WriteLine(i.ToString()) ;
Console.WriteLine(a.Result[i]);
}
}


public static string Test1(int seconds,string text)
{
Thread.Sleep(seconds);
return text;
}
...全文
100 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
The 祺℡ 2020-06-12
  • 打赏
  • 举报
回复
Task<string> t1 = new Task<string>(() => Test1(500, "One")); Task<string> t2= new Task<string>(() => Test1(300, "Two")); t1.Start(); t2.Start(); Task<string[]> a = Task.WhenAll(t1, t2); 要Start,不然Task a会去永远等待两个没有被开始的线程,所以Console.WriteLine(a.Result[i])会一直阻塞。
wanghui0380 2020-06-12
  • 打赏
  • 举报
回复
自己看 Task.WhenAll()返回的是什么,他依旧是ask,是“未来完成时” so,假设你不awat/wait,他不负责通知你。你在做a.result其实就是同步,他自然等着后面完成 解决 1. 如果你能解决static void Main的async,就直接 await Task.WhenAll() 2.如果你解决不了 a.方案:方法移动到另外的方法,这里可以await async b方案:直接同步等待,wait c方案:Task.WhenAll().Continue(//这里写你那个循环)

110,539

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧