2016-03-28 21 views
0

İletileri bir Azure Service Bus Queue oluştururken kendisini çağıran basit bir özyinelem yöntemim var. Yöntem, iletileri bir Mesajlar Listesi'ne ekler ve sıraya daha fazla mesaj olmadığında, Listenin işlenecek ana yöntemine geri gönderir.Yineleme Sınırı Elle Sınırlı mı?

Normal koşullar altında, her şey iyi çalışıyorsa, sıradaki mesajlar sürekli olarak iletildiklerinden kuyrudan sürekli olarak iletiler aldıkça sıradaki iki iletiye daha fazla sahip olmayacaktır. Ancak teoride, eğer işlemcimiz azalırsa, mesajlar acele ederek toplanabilir ve mesajların sayısı büyük olabilir.

İşlemi aşamalı olarak iptal etmeden, işlenecek mesaj kümesini geri göndermeden önce sıraya çekilecek ve Listeye koyulacak ileti sayısına yapay bir sınır koymak istiyorum. tekrar devam et. Ama bunu yapmanın en iyi yolu olduğundan emin değilim. Bir tam sayı oluşturabilir ve her aramayı ekleyebilir, değerini kontrol edebilir ve belirli bir noktaya ulaştığında işlemin dışına çıkabilirim. Ama daha iyi bir yolu var mı?

+2

Artan bir tamsayı geçmekten daha kolay olamazdı ... –

+0

ok. Sadece içine girebildiğim yineleme derinlikleri sayılan C# .NET özniteliğinde yerleşik bazı belirsiz olup olmadığını merak ettim. –

+1

Özyin, görev için uygun olduğundan emin misiniz? –

cevap

1

Sadece sınırlayıcı olarak listenin boyutunu kullanmak - Eğer öğeleri işleme koyuyoruz veri yapısı zaten sizin için bir tane takip çünkü sen bile, bir tamsayı sayısını gerekmez:

if (myMessageList.Length < maxAllowedValue) { 
    // execute your getter procedure which includes 
    // a call to self()... 
} 

Bu özel sorun için, List yerine ConcurrentQueue kullanmayı düşünebilirsiniz, çünkü bu, Length özyinelemeli veri yapısı dolum yöntemi çalışırken güvenli bir şekilde değişmesine izin verecektir.

+0

İyi üzüntü. Bunu neden düşünmediğimi bilmiyorum! –

İlgili konular