SORU
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ş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • BaaaStuds's channel

    BaaaStuds's

    10 Mart 2009
  • ExcelTutorials

    ExcelTutoria

    2 Mayıs 2009
  • Sali Kaceli

    Sali Kaceli

    24 ŞUBAT 2009