finally در سی شارپ چه زمانی اجرا نمی‌شود؟

عموما از کدهای قرار گرفته در قطعه finally جهت آزاد سازی منابع استفاده می‌شود و تضمین شده است که این قطعه همواره اجرا می‌گردد، صرفنظر از اینکه آیا در قطعه try استثنایی رخ داده است یا خیر.

اما مثال زیر را در نظر بگیرید:

using System;

namespace testWinForms87
{
class CTestFinally
{
public static void Run()
{
try
{
TryAndTry();
}
catch (Exception exError)
{
Console.WriteLine(exError.Message);
}
finally
{
Console.WriteLine("Finally...!");
}
Console.ReadKey();
}

static void TryAndTry()
{
try
{
TryAndTry();
}
catch (Exception exError)
{
Console.WriteLine(exError.Message);
}
finally
{
Console.WriteLine("Try: Finally...!");
}
}
}

}

در این کد به علت بروز stack overflow هیچگاه به finally نخواهیم رسید.

  • #
    ‫۱۵ سال و ۵ ماه قبل، چهارشنبه ۶ خرداد ۱۳۸۸، ساعت ۰۶:۱۲
    وحید جان، این بار دیگه زیادی باحالش کردی

    دهن بنده خدا رو سرویس میکنی تا بالا بیاره، بعد میگی کار نمیکنه؟ :)
  • #
    ‫۱۵ سال و ۵ ماه قبل، چهارشنبه ۶ خرداد ۱۳۸۸، ساعت ۱۴:۲۶
    من زیادی آماتورم ولی با علیرضا موافق هستم. شما سیستم رو دور زدی، پیچوندی!! Finally باید برای کد نویسی استاندارد تست بشه.
  • #
    ‫۱۵ سال و ۵ ماه قبل، چهارشنبه ۶ خرداد ۱۳۸۸، ساعت ۱۴:۵۱
    در Environment.Exit
    هم به علت خروج ناگهانی finally اجرا نمی شه.
  • #
    ‫۱۵ سال و ۵ ماه قبل، پنجشنبه ۷ خرداد ۱۳۸۸، ساعت ۰۲:۵۹
    جالب بود ، ممنون .
  • #
    ‫۱۴ سال و ۲ ماه قبل، دوشنبه ۱ شهریور ۱۳۸۹، ساعت ۲۰:۱۷
    اصلا جالب نبود : توی Ruby هزار تا tip جالب تر در مورد SEH هستش