چرا نباید از Thread.Abort() در C# استفاده کرد؟
استفاده از متد Thread.Abort()
در برنامهنویسی بدلیل تمیز به پایان نرساندن ترد میتواند عواقب جدی به همراه داشته باشد. زیرا این متد به طور ناگهانی تلاش میکند که یک thread را از بیرون آن متوقف کند و ممکن است کدهای مربوط به آزادسازی منابع و ... اجرا نشوند.
یکی از بزرگترین معایب این کار نبود تضمین برای توقف thread با صدا زدن Thread.Abort()
است. در برخی شرایط، کدی که در حال اجراست میتواند به گونهای طراحی شده باشد که از Aborts شدن خود جلوگیری کند. حال اگر این کد دارای کدی خطرناک باشد، شما با مشکل مواجه خواهید شد.
بهتر است به جای استفاده از thread، برای کدهایی که خودتان ننوشته اید و به طولانی مدت اجرا می شوند، از process مجزا استفاده کنید. با این کار میتوانید یک process را به طور تمیز و کارآمد متوقف کنید. به عبارت دیگر، Thread.Abort()
نشاندهنده طراحی ضعیف است و باید از آن تا حد ممکن اجتناب شود.
علاوه بر این، با استفاده از Thread.Abort()
ممکن است thread در حالت ناامنی قرار داشته باشد، به عنوان مثال، زمانی که یک lock بر روی یک منبع مشترک برقرار است. در چنین وضعیتهایی، Aborting میتواند منجر به ایجاد مشکل در وضعیت مشترک شود. بهتر است برای اطمینان از خروج تمیز یک thread، مکانیسمهای ارتباطی مؤثرتری را به کار گیرید، بهطوری که thread بتواند بدون خطا منابع را آزاد کند.