Daha önce başka bir framework'ten kopyalanmış basit bir log yardım sınıfı yazdım ve test kullanımı kolay değil, aşağıdaki gibi:
Bu makale, BlockingCollection tabanlı basit bir günlük sınıfını yeniden uygulamaktadır.
BlockingCollection<T>, aşağıdaki işlevleri sağlayan iş parçacığı güvenli bir koleksiyon sınıfıdır:
Yaratıcı-kullanıcı modelini uygulayın. Eşyaları eşzamanlı olarak çoklu iş parçacıklığı ile ekleyin ve getirin. Isteğe bağlı maksimum kapasite. Koleksiyon boş veya dolu olduğunda, yerleştirme ve çıkarma işlemleriyle engellenir. Ekleme ve kaldırma girişimleri belirli bir süre boyunca engellenmez veya gerçekleşmez. Kapsülleme, herhangi bir IProducerConsumerCollection <T>koleksiyon türü gerçekleştirir İptal işlemi yapmak için iptal etiketini kullanın. Foreach kullanan iki tür enum (Visual Basic'te, For Each) desteklenir: yalnızca okunabilir enumlar. Bir öğe sayıldığında bir öğeyi kaldıran bir sayım.
Microsoft şunları tanıtıyor:Bağlantı girişi görünür.
BlockingCollection, süreç içinde üretici-tüketici modunu (örneğin mesaj iletme, loglama vb.) uygulamak için kullanılan iş parçacığı güvenli bir engelleme kuyruğudur.
Kuyruğun içine bilgi eklemek için Add metodunu çağırın, kuyruğun mesajı olmadığında IsCompleted her zaman while döngüsünü engeller, böylece ölü döngü olmaz. Yeni bir mesaj çıktığında, IsCompleted in while tetiklenir ve bool türünü döndürür, bu da yürütmenin devam etmesine neden olur, yani iş parçacığından veri alınır.
Daha önce, ManualResetEvent'in WaitOne metodunu çağırarak, sinyali iletmek için Reset ve Set metodlarını çağırarak iş parçacığını engelliyorduk, şu şekilde:
Test 10.000 log yazar ve bu 10 milisaniyeden kısa sürer, aşağıdaki şekilde gösterildiği gibi:
Kod şöyledir:
Kaynak kodu indirme:
Turistler, bu gönderinin gizli içeriğini görmek isterseniz lütfen Yanıt
|