SORU
12 HAZİRAN 2010, CUMARTESİ


Bir ConcurrentBag< tek, belirli bir nesne kaldırmak için nasıl;>?

ConcurrentBag<T> yeni .NET 4 nasıl TryTake() TryPeek() kullanılabilir zaman belirli, spesifik bir nesne kaldırmak için?

TryTake() kullanarak ve sonra sadece sonuç nesnesi ekliyoruz eğer listesine geri düşünüyorumyokonu kaldırmak istiyor, ama bir şeyler eksik gibi hissediyorum. Bu doğru yol mu?

CEVAP
12 HAZİRAN 2010, CUMARTESİ


Kısa cevap: çok kolay bir şekilde bunu yapamazsın.

Bu ConcurrentBag her iş parçacığı için iş parçacığı yerel bir kuyruk tutar ve sadece diğer konulara " kendi kuyruğunu bir kez sıralar boş olur. bakar Bir öğeyi kaldırmak ve bir sonraki parça daha sonra geri koymak, kaldırmak aynı madde tekrar olabilir. Defalarca öğeleri kaldırmak ve onları geri koyarak tüm öğeler üzerinde yineleme sağlayacak bir garanti yok.

Sizin için iki seçenek var:

  • Tüm öğeleri silmek ve kaldırmak istediğiniz birini bulana kadar onları hatırlamak, diğerleri daha sonra geri koymak. Eğer bu iki iş parçacığı aynı anda yapmaya çalışırsanız sorun olacağını unutmayın.
  • ConcurrentDictionary gibi daha uygun bir veri yapısı kullanın.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • AutoStream's Garage419

    AutoStream's

    15 EKİM 2007
  • We've moved!

    We've moved!

    7 Ocak 2008
  • Vintendo Power

    Vintendo Pow

    2 Ocak 2007