[英]C# awaiting group of tasks, but returning objects
只是一個簡單的問題。 我相信這只是一個快速的語法問題。 下面我發送3個線程並測試多線程我只是讓方法返回一個int,而不是使用它們做任何事情。
現在,我正在嘗試更進一步,並返回發送每個線程的數據表。 但是,我顯然不能說'datatable dt = tasks.Add(.... etc。'
那么我如何同時發送所有3個線程並將3個數據表返回給我? 我會使用除數組之外的東西嗎?
編輯 - 我想我不是在解釋自己,我道歉。 我正在做的就是每個方法(nrx.nzrxin,ni.nzinputins)返回一個數據表。 我只是不知道在線程中發送方法的語法。 通常你會做'datatable 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());
您可以使用Task.WhenAll
輕松收集所有結果:
var results = await Task.WhenAll(tasks);
如果你想要一個同步版本: Task.WhenAll(tasks).Result
。
值得花一些時間來了解所有常見的TPL輔助方法。
得到結果。 簡單。
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;
完成后,檢查每個任務的Result屬性。 請注意,此時異常會冒出來。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.