9 AĞUSTOS 2011, Salı
C için daha iyi bekleyen bir düzen var#mı?
Bu tarz bir kaç kez kendim kodlama buldum.
for (int i = 0; i < 10; i )
{
if (Thing.WaitingFor())
{
break;
}
Thread.Sleep(sleep_time);
}
if(!Thing.WaitingFor())
{
throw new ItDidntHappenException();
}
Sadece kötü kod gibi görünüyor yapmanın daha iyi bir yolu / kötü tasarım bir belirti var mı?
CEVAP
9 AĞUSTOS 2011, Salı
Çok daha iyi bu modeli uygulamak için bir yol Thing
nesne üzerinde tüketici bekleyebilir bir olay kullanır. Örneğin ManualResetEvent
AutoResetEvent
. Bu büyük ölçüde tüketici kodunuzu aşağıdaki gibi olmasını kolaylaştırır
if (!Thing.ManualResetEvent.WaitOne(sleep_time)) {
throw new ItDidntHappen();
}
// It happened
Thing
tarafında kod da çok daha fazla karmaşık değildir.
public sealed class Thing {
public readonly ManualResetEvent ManualResetEvent = new ManualResetEvent(false);
private void TheAction() {
...
// Done. Signal the listeners
ManualResetEvent.Set();
}
}
Bunu Paylaş:
Android Uygulama içi Faturalandırma ha...
Nasıl daha sonra düz metin alma için e...
Nasıl div içeriğini daha büyük değil y...
Dinamik hücre düzenleri için UİTableVi...
Toplu N günden daha eski dosyaları sil...