簡體   English   中英

為C#中的新任務處理空閑資源

[英]Free resource being processed for new Task in C#

作為問題,我有兩個或更多任務(每次使用Task.Run創建新任務)順序訪問相同的對象(主要是List),我想做的是前一個任務將釋放資源,以便后一個可以訪問。 處理我的對象的操作是一個長期運行的(訪問數據庫),所以我不想使用Task.Wait() 我嘗試使用CancellationTokenResource但它不適合我,因為任務仍然運行並保存對象。 關於我應該做些什么的任何建議?

首先, Task取消是合作的 ,這意味着處理任務必須定期檢查是否已請求取消並相應地終止。 不這樣做可能是因為您嘗試使用CancellationToken失敗了。

也就是說,這聽起來像是在嘗試解決生產者 - 消費者問題的變異(或者甚至可能確切地說)。 如果是這樣,強烈考慮使用BlockingCollection<T>類,因為它處理所有邊緣情況並提供一個非常簡單的接口。 制作人只需撥打Add

myBlockingCollection.Add(item);

消費線程使用GetConsumingEnumerable

foreach (var item in myBlockingCollection.GetConsumingEnumerable())
{
}

完成所有生成器后,調用CompleteAdding以使消耗線程終止。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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