C#.NET等待所有线程完成并获得返回值
问题描述:
我用下面的代码创建两个线程,并等待它们完成:C#.NET等待所有线程完成并获得返回值
Task task1 = Task.Factory.StartNew(() => DoSomething(a, b));
Task task2 = Task.Factory.StartNew(() => DoSomething(a, b));
Task.WaitAll(task1, task2);
的DoSomething的方法返回具有字符串返回类型和当两个任务完成时,我想使用它的返回值。
我试图创建两个字符串变量,并为其指定返回值,如:
string x, y;
Task task1 = Task.Factory.StartNew(() => x = DoSomething(a, b));
Task task2 = Task.Factory.StartNew(() => y = DoSomething(a, b));
但我得到的X和Y是未分配的一个编译时错误,我缺少什么吗?
答
尝试使用Task<string>
代替Task
和查询Task<string>.Result
答
这是很容易使用Task.Run
var task1 = Task.Run(() => DoSomething(a, b));
var task2 = Task.Run(() => DoSomething(a, b));
var result1 = await task1;
var result2 = await task2;
答
他说,它的编译时错误来完成;我假设它是默认值的责备。 在第一线,为x和y的默认值分配给null
string x = null;
string y = null;
Task task1 = Task.Factory.StartNew(() => x = DoSomething(a, b));
Task task2 = Task.Factory.StartNew(() => y = DoSomething(a, b));
后也该
Task.WhenAll(task1, task2).ContinueWith((tasks)=>{ // access results here});
为什么向下票;原来 ? :(肯定这是问题。 –