SORU
26 ŞUBAT 2009, PERŞEMBE


Kilitli bir nesne eğer bir istisna oluşursa içeride kilitli kalmak mı?

Bir c# eğer bir nesneyi kilitlemek için yerinde olsam diş çekme uygulaması, bize bir sıra diyelim, ve eğer bir istisna oluşursa, nesnenin kilitli kalacak? Burada pseudo-kod:

int ii;
lock(MyQueue)
{
   MyClass LclClass = (MyClass)MyQueue.Dequeue();
   try
   {
      ii = int.parse(LclClass.SomeString);
   }
   catch
   {
     MessageBox.Show("Error parsing string");
   }
}

Anladığım kadarıyla, yakalamak sonra kod çalıştırmak değil - ama eğer kilidi serbest olacak diye merak ediyordum.

CEVAP
26 ŞUBAT 2009, PERŞEMBE


İlk olarak; TryParse düşündünüz mü?

in li;
if(int.TryParse(LclClass.SomeString, out li)) {
    // li is now assigned
} else {
    // input string is dodgy
}

Kilidi 2 sebep için çıkacak; ilk lock aslında

Monitor.Enter(lockObj);
try {
  // ...
} finally {
    Monitor.Exit(lockObj);
}

İkincisi; seni yakalamak ve yok yeniden atmak iç özel duruma, lock aslında hiç bir istisna olarak görüyor. Tabii ki, bir sorun olabilir bir MessageBox süre boyunca kilit tutuyorsun.

Ama en ölümcül felaket kurtarılamayan özel tüm albüm olacak.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Blendtec

    Blendtec

    30 EKİM 2006
  • Video-Tutorials.Net

    Video-Tutori

    15 Mart 2011
  • WiseOwlTutorials

    WiseOwlTutor

    21 EKİM 2011