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

  • Grace Su

    Grace Su

    6 Ocak 2006
  • Blu animations and other videos

    Blu animatio

    15 HAZİRAN 2007
  • Smith Micro Graphics

    Smith Micro

    15 Mayıs 2008