C#等待一组任务,但返回对象

时间:2015-05-12 19:18:46

标签: c# .net multithreading

只是一个简单的问题。我相信这只是一个快速的语法问题。下面我发送3个线程并测试多线程我只是让方法返回一个int,而不是使用它们。

现在,我正在尝试更进一步,并返回发送每个线程的数据表。但是,我显然不能说'datatable dt = tasks.Add(.... etc。'

那么我如何同时发送所有3个线程并将3个数据表返回给我?我会使用除数组之外的东西吗?

编辑 - 我想我没有好好解释自己道歉。我所做的就是每个方法(nrx.nzrxin,ni.nzinputins)返回一个数据表。我只是不知道在线程中发送方法的语法。通常你会做数据表dt = nrz.nzrxins'。你是如何通过任务完成的?

谢谢,

NZInput NI = new NZInput();
NZOutput NO = new NZOutput();
NZRX NRX = new NZRX();


List<Task> tasks = new List<Task>(3);

tasks.Add(Task.Run(() => NRX.nzrxins()));
tasks.Add(Task.Run(() => NI.nzinputins()));
tasks.Add(Task.Run(() => NO.nzoutputins()));

Task.WaitAll(tasks.ToArray());

3 个答案:

答案 0 :(得分:5)

您可以使用Task.WhenAll

轻松收集所有结果
var results = await Task.WhenAll(tasks);

如果您想要同步版本:Task.WhenAll(tasks).Result

值得花一些时间来了解所有常见的TPL辅助方法。

答案 1 :(得分:3)

获得结果。简单。

NZInput NI = new NZInput();
NZOutput NO = new NZOutput();
NZRX NRX = new NZRX();


var tasks = new[]{
    Task.Run(() => NRX.nzrxins()),
    Task.Run(() => NI.nzinputins()),
    Task.Run(() => NO.nzoutputins())),
};

Task.WaitAll(tasks);

var nrxResult = tasks[0].Result;
var niResult = tasks[1].Result;
var noResult = tasks[2].Result;

答案 2 :(得分:2)

完成后检查每个任务的Result属性。请注意,此时异常会冒出来。