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}); 
+0

为什么向下票;原来 ? :(肯定这是问题。 –