2011-06-02 18 views
7

Tek seferde yalnızca 1 komutu işleyebilen bir donanım kaynağı ile uğraşıyorum. Bazılarının API işlevlerini bir web arayüzü aracılığıyla açığa çıkaracağım, bu yüzden bir anda birden fazla komutun gönderileceği iyi bir şans var. Gönderildiklerinde bu komutları sıraya koymanın seri işlemeyi sağlamanın en iyi yolu olduğuna karar verdim.Sırasıyla C#

Sırayı, statik bir sınıfta uygulamayı planlıyorum. Web uygulaması kod arkası, istedikleri komuta karşılık gelen bir yöntemi arayarak bir komut ekleyecektir. Çağırma yönteminin, komutunun çıktısını alana kadar beklemesini istiyorum, bu nedenle async büyüsü gerekli değildir.

  1. Bunu doğru mu yapıyorum? Daha iyi bir yolu var mı?

  2. C# (genellikle Java ile çalışıyorum) sıradaki kuyruğu nasıl uygulamaya başlarım?

Ben .NET Framework 4.

+0

Kullanmakta olduğunuz .NET sürümünü açıklığa kavuşturmak için sorunuzu değiştirebilir misiniz? ConcurrentQueue (4.0+) veya Queue (2.0+) kullanıp kullanamayacağınızı belirler. –

cevap

10

Uygulamanız için ConcurrentQueue sınıfını kullanabilir ve sıradaki öğeleri işlemek için özel bir iş parçacığına sahip olabilirsiniz. Bir AutoResetEvent, üretici taleple birlikte tekil sınıfına olay örneğini geçişi kullanabilirsiniz bekleyen kısmı için

ardından işlemci kadar bloklar işleme işaretini verdi WaitOne()Set() arayarak tamamlanır çağırır.

+0

Tam olarak aradığım şey gibi görünüyor. Yardım için teşekkürler! – uscere90

6

Sesler kullanıyorum ... Ben bir iş eklendiğini bildirmek için bir çeşit Olay gerekir varsayıyorum ve Handler kuyruğunun işlemini başlatma iyi bir yaklaşım gibi HARICI: Generic Queue collections class.'u kullanın.'u yazmayın! İyi yapılmış bir tekerleği yeniden icat ederdin.

İlgili konular