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

  • How It Should Have Ended

    How It Shoul

    5 Mart 2007
  • Phlearn Photoshop and Photography Tutorials

    Phlearn Phot

    11 EKİM 2011
  • Strata1000

    Strata1000

    28 EYLÜL 2009