我正在考慮在我正在編寫的程序中使用ConcurrentBag,但我似乎無法在TryTake上找到足夠的文檔。ConcurrentBag.TryTake()在什麼情況下會失敗?
我知道這個方法可能會失敗,但我找不到可能發生此類故障的情況的解釋,以及收集失敗後將保留的狀態。
如果只是在另一個線程已經刪除了該項目的情況下,我不在乎,但我真正無法承受的是我想刪除的項目仍然在通話後的集合中。
這可以嗎?
我正在考慮在我正在編寫的程序中使用ConcurrentBag,但我似乎無法在TryTake上找到足夠的文檔。ConcurrentBag.TryTake()在什麼情況下會失敗?
我知道這個方法可能會失敗,但我找不到可能發生此類故障的情況的解釋,以及收集失敗後將保留的狀態。
如果只是在另一個線程已經刪除了該項目的情況下,我不在乎,但我真正無法承受的是我想刪除的項目仍然在通話後的集合中。
這可以嗎?
從文檔中返回false,如果沒有物品可用,即袋子是空的。因爲它是一個線程安全的集合,所以在'空'和多個線程周圍不應該有任何問題。
你必須採取用於result T
的文檔以及所述return value
考慮:
結果T:此方法返回時,結果包含從ConcurrentBag或T的,如果默認值除去對象袋子是空的。
返回:如果對象成功移除,則返回true;否則,是錯誤的。
好的解釋,但很差的文檔... – em70 2011-01-06 11:16:42
既然你正在處理多線程,沒有什麼可以阻止另一個線程加入在這TryTake
已經決定返回false一瞬之間袋的物品(和設置它的返回值爲default(T)
),以及TryTake
實際返回到您的代碼的時刻。
所以,當你能夠處理錯誤的結果時,袋子裏實際上可能有一件物品。
某些代碼(失敗)和異常的細節你會得到幫助! – decyclone 2011-01-06 10:54:48
@decyclone,他沒有得到失敗的代碼,他問在什麼情況下TryTake方法可能會失敗,以及失敗後集合的狀態。 – 2011-01-06 10:59:58