tg-me.com/CsharpTips/349
Last Update:
به نحوه ی صدا زدن دو تابع زیر دقت کنید:
new Task(async () => throw new NotImplementedException()).Start();
Task.Run(async () => throw new NotImplementedException());
اتفاقی که بعد از اجرا میوفته:
توی تابع اول اپلیکیشن شما کرش میکنه و به طور کامل با خطای unhandled exception بسته میشه.
توی تابع دوم اپلیکیشن شما به راه خودش ادامه میده.
چرا این اتفاق میوفته؟
چون سازنده ی Task متد Func<Task?> رو پیاده سازی نکرده، این یعنی ورودی شما به عنوان کانستراکتور یا سازنده مستقیم به یک Action تبدیل شده و وارد سازنده ی کلاس میشه.وقتی شما به یک Action ورودی async میدید این درواقع برای شما مثل یک تابع async void عمل میکنه و اگر Exception ای اونجا رخ بده چون هیچکجا هندل نشده و باعث میشه اپ شما کرش کنه.
راه کارش اینه که شما try catch بذارید و جلوی این مشکل رو بگیرید.
اما روش بهینه اش اینه که بذارید توسط خود Task.Run این اتفاق بیوفته چون خود Task خطاهارو به نحوی هندل میکنه که unhandled exception نخورید و باعث میشه اپ شما کرش نکنه اما لاگ کردن این نوع خطاها نیازمند یک کلاس Helper هست که با پیاده سازیش خودتون میتونید توی کارهای پس زمینه ی خودتون لاگ بذارید که اگر خطایی خورد متوجه عملکرد نرم افزار بشید.
پس مراقب باشید که چطوری از Task استفاده می کنید.
#تخصصی
#سی_شارپ
#تسک
#Task
#Thread
کانال تلگرام:
@CsharpTips
BY C# Programming Guide
Warning: Undefined variable $i in /var/www/tg-me/post.php on line 283
Share with your friend now:
tg-me.com/CsharpTips/349