2013-06-06 27 views

回答

5

人們可以read the fine manual發現:

ConcurrentBag<T>.GetEnumerator方法

枚舉代表的包裏的瞬間即時快照。 在調用GetEnumerator之後它並不反映對集合的任何更新。該枚舉器可以安全地同時使用讀取和寫入包

強調我的。

1

賈斯汀Etheredge有ConcurrentBag類的blog post解釋特點:

爲了實現可枚舉的線程安全的,GetEnumerator方法返回ConcurrentBag的時刻即時快照,因爲它當你開始迭代它時。通過這種方式,枚舉開始後添加的任何項在迭代數據結構時都不會被看到。

這意味着:當開始枚舉ConcurrentBag<T>時,會創建當前狀態的快照。枚舉將只顯示枚舉開始時袋中的元素。

其他線程仍然可以添加和刪除元素,但它們不會更改枚舉所看到的元素集。