第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何使用 TPL Dataflow 處理完整的輸入列表?

如何使用 TPL Dataflow 處理完整的輸入列表?

C#
慕容708150 2023-07-23 14:03:08
我是 TPL Dataflow 的新手,它可以工作,但我不確定我是否正確使用它。我有一個輸入(字符串)列表,我想以最大并行度處理它們(全部),并知道何時全部完成?,F(xiàn)在我只是foreach通過輸入并調(diào)用Post,ActionBlock忽略返回值。這似乎不正確,因?yàn)樗赡軙G失輸入。我的問題是:如何避免丟失物品?是否有一個內(nèi)置塊,我可以只向其中提供我的輸入,并且它將確保它們都被嘗試?(無論每次輸入成功/失敗。)我看到的建議基本上是:await block.Completion;這是否說明了失敗的輸入(其中Post或SendAsync將返回 false)?對我來說奇怪的是,這個決定似乎是在我打電話時而Post不是之后做出的,所以這Completion甚至不包括這些項(xiàng)目。我覺得我基本上需要一個重試循環(huán)來處理上次無法處理的輸入,類似于:while (items.Count > 0) {  foreach (var item in items) {    if (await block.SendAsync(item)) {      items.Remove(item);    }  }  await block.Completion;}block.Complete();(除非有更好的循環(huán)處理/錯誤檢查。)這個額外的級別是不必要的嗎?或者我在概念上哪里錯了?
查看完整描述

2 回答

?
慕標(biāo)琳琳

TA貢獻(xiàn)1830條經(jīng)驗(yàn) 獲得超9個贊

這似乎不正確,因?yàn)樗赡軙G失輸入。

假設(shè)您使用默認(rèn)值,這是正確的。Postfalse當(dāng)塊拒絕輸入時才返回。如果模塊已接收到Complete信號,或者模塊的輸入緩沖區(qū)已滿,則可能會發(fā)生這種情況。默認(rèn)情況下,每個塊的輸入緩沖區(qū)可以無限增長,因此ActionBlock具有默認(rèn)輸入緩沖區(qū)大小的塊只會false在調(diào)用Post后返回。Complete

最常見的用例ActionBlock是具有無限的有限容量,并且代碼僅Complete在添加所有項(xiàng)目后調(diào)用。在這種情況下,Post永遠(yuǎn)不會返回false,您可以安全地忽略返回值。


查看完整回答
反對 回復(fù) 2023-07-23
?
翻過高山走不出你

TA貢獻(xiàn)1875條經(jīng)驗(yàn) 獲得超3個贊

Post如果塊完成,或者塊的輸入緩沖區(qū)已滿,該方法將返回 false。由于該設(shè)置并不是什么奇特的東西,并且很可能在項(xiàng)目的后期階段需要解決高 RAM 使用率的新問題,因此我認(rèn)為使用該方法并簡單地忽略結(jié)果BoundedCapacity并不是一個安全的選擇。Post為了避免涉及丟失消息(可能是訂單或發(fā)票)的無趣錯誤,您可以執(zhí)行以下操作:


foreach (var item in items)

{

    var accepted = block.Post(item);

    if (!accepted) throw new InvalidOperationException("Item was not accepted");

}

這樣,您至少會收到有關(guān)某些內(nèi)容損壞的通知,并且不會讓錯誤行為蔓延。


另一方面,等待SendAsync并忽略結(jié)果要安全得多。SendAsync通常會在發(fā)生異?;虬l(fā)生取消的情況下返回,在這種情況下,您會在塊發(fā)生時false收到通知。所以在這種情況下不需要拋出異常。awaitCompletion


foreach (var item in items)

{

    await block.SendAsync(item).ConfigureAwait(false);

}

出于性能原因,您可以同時使用Post和SendAsync。僅當(dāng)您有數(shù)千萬個項(xiàng)目需要處理時,這才會產(chǎn)生影響。


foreach (var item in items)

{

    if (!block.Post(item))

    {

        await block.SendAsync(item).ConfigureAwait(false);

    }

}


查看完整回答
反對 回復(fù) 2023-07-23
  • 2 回答
  • 0 關(guān)注
  • 190 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號