2011-05-05 24 views
8

Pahalı bir nesneyi .NET'in Lazy sınıfı aracılığıyla başlatmaya çalışıyorum, bu durum bir istisna nedeniyle başarısız olabilir. Tembel sınıfın örneği önbelleğe alınır, çünkü sonraki girişimde başlatma başarılı olabilir. önbelleğe olmayacak PublicationOnly istisna ile .NET'in belgelerine göreTembel başlatma sırasında atılan özel durum yakalanamıyor (C# .NET)

Lazy<someObject> lazyValue = 
    new Lazy<someObject>(() => { expensive initialization; }, 
     System.Threading.LazyThreadSafetyMode.PublicationOnly); 

ve böylece tek bir değer yeniden başlatmak deneyebilirsiniz şu şekildedir: Ben böylece örneğini oluşturma. Özel durumun yakalanamayacağı sorunuyla karşılaştım. Şimdi kendi tembel sınıfımı yazmak oldukça basit ama .NET'in Lazy sınıfını hatalı kullanıyorum mı yoksa bir hata mı olduğunu öğrenmek ister misiniz? çalışması gerekir gibi görünüyor,

private static void DoesntWork() 
{ 
    int i = 0; 

    Lazy<string> lazyValue = new Lazy<string>(() => 
    { 
     if (i < 2) 
     { 
      throw new Exception("catch me " + i); 
     } 

     return "Initialized"; 
    }, System.Threading.LazyThreadSafetyMode.PublicationOnly); 

    for (; i < 3; i++) 
    { 
     try 
     { 
      Console.WriteLine(lazyValue.Value); 
     } 
     catch (Exception exc) // I do not catch the exception! 
     { 
      Console.WriteLine(exc.Message); 
     } 
    } 
} 
+2

Benim için çalışıyor, beni yazdır 0 Beni yakala 1 Başlangıcı ' – SLaks

+0

makinemde çalışıyor. Hata ayıklama olmadan çalıştırın (CTRL-F5) – jeroenh

+1

Ctrl-F5 ile çalıştırmayı denedim ve sağ işinize yaradı ama şimdi hata ayıklama sırasında neden çalışmaz? – Rehan

cevap

5

Kuyusu:

aşağıdaki (basitleştirilmiş) kodu sorunu yeniden olacaktır. Eğer istisna attığını ama onu yakalamadığını söylüyorsanız, o zaman ... herhangi bir şansla, Visual Studio'da koşuyorsunuz ve ArgumentException'ı her zaman orada kırılmasını söylemek için Hata Ayıklama> Özel Durumlar menüsünde kontrol ediliyor mu?

+0

İstisna türü farketmez, System.Exception ile de olur ve evet, atıldığını ve yakalanmadığını söylerim ... – Rehan

+0

@Rehan Peki, yukarıdaki yorumlarda hata ayıklama çalışmaları olmadan çalıştığınızı söylüyorsunuz. Bu doğru olabileceğimi gösteriyor. Hata Ayıklama> Özel Durumlar menüsünü kontrol ettiniz mi? – Tesserex

+2

Doğru, Visual Studio her zaman kırılacak şekilde ayarlandı ama kafam karıştı çünkü istisna kutusu istisna ile açılır: "İstisna, kullanıcı kodu tarafından işlenmedi", ki bu açıktı. – Rehan

İlgili konular