2012-08-30 27 views
6

Üretici-Tüketici problemi kullanıyorum ve veri ürettiğim ve ondan bir tarih aldığım bir BlockingCollection kullanıyorum. Verileri üretmek için bir yöntem çağırıyorum ve tıkanıklığı KompleDüzenlemeye ayarlıyorum, böylece tüketici BC'den tüm verileri tüketir (engelleme) ve bazı uygulamalardan sonra uygulama BC'ye başka bir veri eklemek istediğinde CompleteAdding'e ayarlandığından, CompleteAdding'i yanlış olarak nasıl ayarlayabilirim veya ComleteAdding'i beklemeden BC'den tüm verileri nasıl kullanabilirim?CompleteAdding tamamlandıktan sonra BlockingCollection eklemek

Teşekkürler.

cevap

10

Yapamazsınız - CompleteAdding numaralı telefonun tüm amacı, "Bu koleksiyona daha fazla veri eklenmeyecek. Boş olduğunda, bittiğini biliyorsunuz." İstediğin şey biraz "Bir ağ bağlantısını kapattıktan sonra, daha fazla veri yazabilmem için nasıl yeniden açabilirim?"

, tasarımınızı yeniden düşünmenizi önerir. Belki de bu noktada yeni bir BlockingCollection oluşturmalısınız? Ya da belki 'u yapmazsınız CompleteAdding ile başlamak ister misiniz?

+0

Ancak, CompleteAdding'i çağırmazsam, döngü nasıl sona erer? çünkü bir döngü kullanıyorum çünkü .GetConsumingEnumerable() özelliği – XandrUu

+0

@XandrUu: Genel olarak değil - bu doğru olur, çünkü daha fazla veri koyarsınız. Eğer bir "bu toplu işi bitir" fikri istiyorsanız, bir sentinel değeri düşünmek ... veya her parti için bir koleksiyona sahip olmak isteyebilir. –

+0

@JonSkeet, onu çağırmanın yararı ne olurdu, örneğin: neden bu koleksiyonu kapattığınızı söyleyerek kendinizi sınırlarsınız? – koenmetsu

İlgili konular