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