只是一个简单的问题。我相信这只是一个快速的语法问题。下面我发送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());
答案 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属性。请注意,此时异常会冒出来。