To jest bardziej akademickie pytanie ... ale czy ConcurrentDictionary.TryAdd może się nie powieść? A jeśli tak, to w jakich przypadkach i dlaczego?Czy ConcurrentDictionary.TryAdd może się nie powieść?
Odpowiedz
Tak można, tutaj są warunki (from msdn):
- ArgumentNullException - gdy kluczyk jest null odniesienia
- OverflowException - gdy została osiągnięta maksymalna liczba elementów
- It zwraca false jeśli element z tym samym kluczem już istnieje
Tylko powtórzyć, nie ma to nic wspólnego ze współbieżnością. Jeśli martwisz się o dwa wątki wstawiania elementu w tym samym czasie, to może dojść do następujących:
- Obie wkładki działać dobrze, jeśli klucze są różne
- Jedna wkładka działa prawidłowo i zwraca true, druga wkładka nie (bez wyjątku) i zwraca wartość false. Dzieje się tak, gdy dwa wątki próbują wstawić przedmiot z tym samym kluczem i zasadniczo tylko jeden wygrałby drugi.
Ok ... więc nic wspólnego z dostępem współbieżnym ... to po prostu wykonuje te same kontrole, które trzeba wykonać ze standardowym słownikiem. –
Tak, wewnętrznie używa wirtualizacji procesora, co umożliwia wielokrotne jednoczesne połączenia. – oleksii
Dzięki .. Przyjmuję twoją odpowiedź jako najbardziej konstruktywną. Debagujemy tutaj o dość nieuchwytnym błędzie i wykluczamy potencjalne źródła linii po linii. Mogę wykluczyć TryAdd na podstawie tego, co włożyłeś (chociaż nadal będę dodawał dodatkowe logowanie w przypadku nieudanego dodania) –
Pewnie, że może. Jeśli klucz już istnieje, metoda zwróci wartość false.
Ref: http://msdn.microsoft.com/en-us/library/dd267291.aspx
Return Value Typ: System.Boolean true, jeśli para klucz/wartość została dodana do ConcurrentDictionary pomyślnie. Jeśli klucz już istnieje, ta metoda zwraca wartość false.
Cóż ... to jest dane. Czy to jedyny przypadek, w którym może się nie udać? –
@daveL - tak, kiedy występują wyjątki ... zobacz odpowiedź Oleksii. –
Dzięki za pomoc .. I + 1ed you –
Nie powiedzie się, gdy klucz już istnieje w słowniku.
Jeśli nie można dodać wartości, ponieważ zabraknie pamięci, zamiast tego otrzymasz wyjątek.
- 1. Dlaczego czytanie z php: // opakowania pamięci, które właśnie napisałem, aby się nie powieść?
- 2. nginx nie zaczął się i nie może się uruchomić
- 3. Czy sama pętla może się blokować?
- 4. Czy GHCJS/Haste może się kompilować?
- 5. Czy tablica JavaScript może się sama zawierać?
- 6. Czy funkcja JavaScript może się zwrócić?
- 7. nie może powołać się na indeksy chrome.tabs.move
- 8. WeChat Administrator nie może się zalogować
- 9. PostgreSQL: rola nie może się logować
- 10. PyCharm nie może połączyć się z GhostDriver
- 11. Socket.IO nie może się połączyć przez https
- 12. xcodebuild nie może połączyć się z Simulator
- 13. PHP nie może rozszerzyć się z interfejsu?
- 14. VS2012 nie może połączyć się emulator WP8
- 15. Rspec capybara Użytkownik nie może się zalogować
- 16. Sieć Lidgren nie może połączyć się z
- 17. Android bluetooth nie może się połączyć
- 18. AVD nie może się poruszać na ekranie
- 19. Gitbash zamyka się natychmiast, nie może zalogować się do Github
- 20. odległość (od: do :) "jest niedostępna: Dowolna konwersja indeksu widoku String może się nie powieść w Swift 4; proszę odłączyć opcjonalne wskaźniki
- 21. Czy Scala.js się nie kompiluje?
- 22. Programowe określanie, który węzeł w dokumencie XML spowodował sprawdzanie poprawności w odniesieniu do jego schematu XML, aby się nie powieść
- 23. Czy exit() nie może zakończyć procesu?
- 24. Czy klasa może nie mieć konstruktora?
- 25. nie może wykryć, czy istnieje zmienna Session
- 26. Czy Regex może zastąpić nie-chciwe?
- 27. Czy nazwa pakietu Python może zaczynać się od cyfry?
- 28. Czy obiekt może się sam usunąć? W jaki sposób?
- 29. Python: czy __file__ może być Brak, jeśli import się powiódł?
- 30. Czy identyfikatorForVendor może się zmienić podczas aktualizacji aplikacji?
W obecnej wersji to pytanie jest dość ogólnikowe. MSDN [strona] (http://msdn.microsoft.com/en-us/library/dd267291.aspx) dokumentuje kilka powodów, wyjątkowych i innych (jak dotychczas wspomniano w odpowiedziach). –
Taa i dokumentacja MSDN znana jest ze swojej klarowności i bezbłędności. –
Cóż, wydaje się to jasne i bezbłędne dla innych odpowiedzi. –