簡體   English   中英

C#等待一組任務,但返回對象

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM