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...