這是更多的學術問題......但可以ConcurrentDictionary.TryAdd失敗?如果是這樣,在什麼情況下,爲什麼?可以ConcurrentDictionary.TryAdd失敗?
回答
是的,可以,這裏的條件是(from msdn):
- ArgumentNullException - 當關鍵是空引用
- 發生OverflowException - 當達到元素的最大數量
- 它返回假如果具有相同密鑰的元素已存在
只是重申,這與併發無關。如果擔心兩個線程在同一時間插入一個項目,然後會出現以下情況:
- 兩個刀片做工精細,如果使用不同的密鑰
- 一個插入工作正常,返回true,其他插入失敗(沒有例外)並返回false。如果兩個線程試圖用同一個鍵插入一個項目,並且基本上只有一個線程會贏得另一個線程,則會發生這種情況
好吧...所以與併發訪問無關..它只是執行與標準字典相同的檢查。 – 2012-07-16 09:59:36
是的,它在內部使用CPU旋轉,允許多個併發連接。 – oleksii 2012-07-16 10:02:53
謝謝..我接受你的答案是最有建設性的。我們正在調試一個相當難以捉摸的bug,並逐一排除可能的來源。我可以根據您的貢獻排除TryAdd(儘管如果添加失敗,我仍會添加額外的日誌記錄) – 2012-07-16 10:06:14
當然可以。如果該鍵已經存在,該方法將返回false。
編號:http://msdn.microsoft.com/en-us/library/dd267291.aspx
返回值 類型:System.Boolean 真如果鍵/值對添加到ConcurrentDictionary成功。 如果密鑰已經存在,則此方法返回false。
呃...這是一個給定的。這是唯一可能導致失敗的情況嗎? – 2012-07-16 09:55:50
@daveL - 是的,當發生異常時...請參閱Oleksii的回答。 – 2012-07-16 10:01:06
感謝您的幫助..我爲您+1了 – 2012-07-16 10:07:19
當密鑰已存在於字典中時,它將失敗。
如果由於耗盡內存而無法添加該值,您將會得到一個異常。
- 1. EXC_BAD_INSTRUCTION:task_thread失敗可可
- 2. 我可以連接tsql,但bsqldb失敗
- 3. 可以Selenium截圖測試(Assert.assertEquals())失敗?
- 4. 我可以檢查roxygenize是否失敗?
- 5. 獲取-WmiObject可以Win32_NetworkAdapterConfiguration的-Match失敗
- 6. 如何/爲什麼可以fork()失敗
- 7. PayPal Express Checkout API:可以DoExpressCheckoutPayment失敗?
- 8. Winsock連接可以隨機失敗嗎?
- 9. 可以str()在Python中失敗?
- 10. 鏈條失敗後可以繼續嗎?
- 11. 可以鎖定列表失敗
- 12. PropertyUtils.copyProperties何時可以靜默失敗?
- 13. 我可以從_pre_put_hook導致失敗嗎?
- 14. MagicSuggest以PHP失敗
- 15. 可可 - 如果雙失敗?
- 16. 如果子查詢失敗,可以讓MySQL成功嗎?如果子查詢成功,我可以失敗嗎?
- 17. 可見性綁定失敗
- 18. Java可序列化失敗
- 19. Firefox以字體失敗
- 20. Django CSRF失敗 - 可能的失敗原因是什麼?
- 21. JNI的System.loadLibrary失敗可可dylib
- 22. SSIS失敗包失敗
- 23. number_to_currency軌失敗,0失敗
- 24. 呼叫失敗()失敗
- 25. 是否可以修改Travis-CI上的失敗內部版本
- 26. 我可以使用rand('等待','成功','失敗','退款')
- 27. 什麼可以使Class :: Loader失敗,其中「使用」和「新」不?
- 28. Angular 2 - 可以承諾的承諾失敗
- 29. SqlOpenHelper#onUpgrade(...)在數據庫以可讀方式打開時失敗
- 30. 如果execvp失敗,可以查殺一個子進程
就目前來看,這個問題很模糊。 MSDN [page](http://msdn.microsoft.com/en-us/library/dd267291.aspx)記錄了幾個原因,例外和其他(如迄今爲止提到的答案)。 – 2012-07-16 09:58:50
是的,MSDN文檔以其清晰和完美而聞名 – 2012-07-16 10:01:32
那麼,對於其他答案來說,它看起來清晰無瑕。 – 2012-07-16 10:02:23