Eşzamanlı öğelerle eşzamanlı olarak BlockingCollection
var. Farklı öğeler eklemek veya almak için nasıl değiştirebilirim?Eşzamanlı Koleksiyonlar ve Benzersiz öğeler
5
A
cevap
4
BlockingCollection
için varsayılan yedekleme deposu ConcurrentQueue
'dur. Başka birinin işaret ettiği gibi, bunu kullanarak farklı öğeler eklemek oldukça zordur. Ancak, IProducerConsumerCollection
'u uygulayan kendi koleksiyon türünüzü oluşturabilir ve bunu BlockingCollection
yapıcısına iletebilirsiniz.
Şu anda kuyrukta bulunan öğelerin anahtarlarını içeren bir ConcurrentDictionary
düşünün. Bir öğe eklemek için, önce sözlükte TryAdd
'u, öğeyi eklemediğiniz sözlükte değil ve kuyruğa ekleyin. Take
(ve TryTake
) sıradaki sonraki öğeyi alır, onu sözlükten kaldırır ve geri döndürür.
Eşzamanlı bir HashTable
varsa tercih ederim, ancak bir tane olmadığından, ConcurrentDictionary
ile yapmanız gerekecek.
İlgili konular
- 1. MVVM, koleksiyonlar ve ORM
- 2. JAXB ve jenerik içeren koleksiyonlar
- 3. Mongodb - bilenmiş ve edilmemiş koleksiyonlar
- 4. Dönen koleksiyonlar
- 5. Eşzamanlı bağlantı ve performans?
- 6. Eşzamanlı oturumlar ve AJAX
- 7. Flask-Mongoengine'de Koleksiyonlar ve tasarruf geçişi
- 8. Arayüz Oluşturucu: Instantiate ve Populate Dizileri/Koleksiyonlar?
- 9. Koleksiyonlar C# üzerinde VB.NET
- 10. Backbone.js içinde sayfalanmış koleksiyonlar
- 11. JAXB sarılı sarılı koleksiyonlar
- 12. Sözde öğeler ve görüntüler
- 13. Özel öğeler ve erişilebilirlik
- 14. set_difference ve set_intersection eşzamanlı olarak
- 15. XmlPoke ve benzersiz düğümler
- 16. null değil SQLAlchemy ve Django benzersiz
- 17. Bitirme Eşzamanlı Sözlüğü
- 18. CSS opaklığı ve alt öğeler
- 19. İç Metin ve alt öğeler
- 20. Öğeler ve Metin CSS3 Konumlandırma
- 21. NHibernate StatelessSession kullanarak basamaklı koleksiyonlar
- 22. Sıralama olmadan benzersiz benzersiz
- 23. php Eşzamanlı dosya adı yüklerken
- 24. MDB eşzamanlı örnekler başlatılıyor
- 25. Eşzamanlı olarak
- 26. Diziler/koleksiyonlar ve her döngü için kullanıcı tanımlı türleri
- 27. İç içe geçmiş Haritalar ve Koleksiyonlar in Neo4j 2
- 28. Html bağlantı etiketi onclick() ve href eşzamanlı
- 29. OkHttp ve Güçlendirme, eşzamanlı isteklerle yenileme belirteci
- 30. java kolleksiyonları vs koleksiyonlar çerçevesindeki harita
Farklı öğeler eklemek [şaşırtıcı derecede zor] gibi görünüyor (http://stackoverflow.com/questions/6603969/how-to-access-the-underlying-default-concurrent-que-a-a-blocking-collection) imkansız değilse. 'BlockingCollection' IEnumerable' özelliğini uygular, böylece Distinct() 'işlevini kullanabilirsiniz. –
GertArnold tarafından bağlantılı StackOverflow sorusunda sağlanan kodu kullanabilirsiniz, ancak sadece bir IProducerConsumerCollection öğesinin TryAdd ve TryTake uygulamasında her zaman doğrudur. Bu işe yarayacaktı. Bunun korkunç bir form olduğunu biliyorum ama işe yarayacak ve BlockingCollection zaten bir istisna atarak formunu kırıyor. Ne kadar sinir bozucu. – Kevek