none
BlockingCollection與Task RRS feed

  • 問題

  • 目的:將執行動作丟到一個集合,並且依序執行,當條件發生時停止執行緒並且清空動作。

    作法:

    將需要執行的動作丟進BlockingCollection
    並且由task執行A function 再將BlockingCollection資料取出使用

    private void A() { foreach(var arr in BlockingCollection.GetConsumingEnumerable()) {

    if (ct.IsCancellationRequested) ; } }

    但是當某些情況發生時 需要清空BlockingCollection , 並且停止task

    並且後續可以再度重啟。

    1.後續透過CancellationTokenSource.Cancel();可以取消但是卻無法立即 因為if (ct.IsCancellationRequested)得放在foreach內

    2.BlockingCollection不知道怎麼清空 多執行一個foreach執行BlockingCollection.GetConsumingEnumerable(); 卻當foreach結束時 程式卡住


    2018年2月2日 上午 06:11

解答