2015-05-12 59 views
3

只是一個簡單的問題。我相信這只是一個快速的語法問題。下面我發出3個線程,並測試多線程我只是有方法返回一個int,而不是將它們用於任何事情。C#等待任務組返回對象

現在,我試圖進一步與此並返回一個數據表與每個線程發出。然而,我顯然不能說'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()); 

回答

2

檢查每個任務完成後的結果屬性。請注意,在這一點上例外情況會起泡。

5

您可以輕鬆地通過使用Task.WhenAll收集所有的結果:

var results = await Task.WhenAll(tasks); 

如果你想有一個同步版本:Task.WhenAll(tasks).Result

花費一些時間去了解所有常用的TPL輔助方法是值得的。

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

感謝這就是我一直在尋找!欣賞它! – user3494110