نمایش نتایج 1 تا 5 از 5

نام تاپیک: مدیریت استثناء در نخ جدید

  1. #1

    مدیریت استثناء در نخ جدید

    سلام
    دوستان ، در async await (و کلا در زمانی که درون نخ جدیدی هستیم) ، مدیریت استثناء ها چجوری هه؟

    مقاله زیر را یه نگاه بسیار گذرا کردم و فرضا کدی شبیه اونچه نوشته بود نوشتم اما خطا ، مدیریت نمیشه :

    Exception handling (Task Parallel Library) | Microsoft Learn

    C#‎‎‎‎ - What is the best way to catch exception in Task? - Stack Overflow


    void ExceptionHandler(Task task)
    {
    MessageBox.Show(task.Exception.Message);
    }




    private async void MethodAsync()
    {
    Task fibonacciTask = Task.Factory.StartNew(() => { throw new Exception("Test"); });
    //await fibonacciTask.ContinueWith(new Action<Task>(this.ExceptionHandler),
    // TaskContinuationOptions.OnlyOnFaulted);


    try
    {
    await fibonacciTask;
    }
    catch (AggregateException e)
    {
    MessageBox.Show(e.Message);
    }
    }




    void ExceptionHandler(Task task)
    {
    MessageBox.Show(task.Exception.Message);
    }




    private async void MethodAsync()
    {
    Task fibonacciTask = new Task(() => { throw new Exception("Test"); });
    fibonacciTask.ContinueWith(new Action<Task>(this.ExceptionHandler),
    TaskContinuationOptions.OnlyOnFaulted);


    try
    {
    fibonacciTask.Start();
    await fibonacciTask;
    }
    catch (AggregateException e)
    {


    }
    }



    در کد دوم هم که میگه با پارامتر TaskContinuationOptions.OnlyOnRanToCompletion ئه متد ContinueWith میتونیم مدیریت کنیم ، باز هم فرقی نکرد .
    در کد بالا ، بجای await fibonacciTask ، از متد Await هم طبق کد لینک اول گذاشتم ، باز هم فرقی نکرد .

    من با .NetFramework 4.6.2 کار میکنم .
    الان اونچه در اون لینک ها گفتن ، کار میکنه؟ یا برای من یا برای نسخه ی دات نت فریم وورک هست؟

    تشکر

  2. #2

    نقل قول: مدیریت استثناء در نخ جدید

    هر exception ای لزوما AggregateException نیست.
    در کد شما اصلاح کنید به
    catch (Exception e)

  3. #3

    نقل قول: مدیریت استثناء در نخ جدید

    نقل قول نوشته شده توسط Mahmoud.Afrad مشاهده تاپیک
    هر exception ای لزوما AggregateException نیست.
    در کد شما اصلاح کنید به
    catch (Exception e)
    سلام
    بله حواسم نبود .

    اما فرقی نداره . کلا مدیریت نمیشه .
    تشکر

  4. #4

    نقل قول: مدیریت استثناء در نخ جدید

    سلامی مجدد
    خیلی ممنون
    اگه از اون متدی که async await توش بکار میره ، از نوع Task باشن ، حتی بدون try catch هم فقط زمانی که بدون استفاده از visual studio (یا فقط با استفاده از گزینه ی start without debugging) ، پروژه را اجرا میکنیم ، حتی در این صورتی که exception را پرتاب کردیم هم هیچ خطایی نمیده .
    اما اگه خروجی اون متدها را از نوع void بگیریم ، exception پرتاب میشه .

    اما منظورم هیچ کدوم شون زمان اجرای برنامه توسط visual studio نبودن (یا فقط با استفاده از گزینه ی start without debugging) .


    private async Task MethodAsync()
    {
    Task fibonacciTask = Task.Factory.StartNew(() => { throw new Exception("Test"); });
    await fibonacciTask;
    }



    ============


    همچنین اینکه همونطور که گفته بودن در همون لینک ، همه ی اونها ، برای زمانی که برنامه را با اون حالت اجرا میکنیم (یا بدون دیباگ) ، درست هست .

    یعنی در اون حالت اجرا (زمان اجرا بدون استفاده از ویژال استودیو یا با حالت بدون دیباگ اش) ، وقتی قسمتِ await را در try catch بذاریم ، exception هایی که در نخ جدید (که همون در Task های اجرا شده هست) پرتاب میکنیم ، هندل و مدیریت میشن .
    البته نکته هم که باید یادمون باشه اینه که خروجی این متدهایی که کلمه ی کلیدی async await توشون بکار میبریم هم را تا جای ممکن (معمولا بجز رویدادها) ، از نوع Task یا کلا نوع جنریکش بگیریم .



    private async Task MethodAsync()
    {
    Task fibonacciTask = Task.Factory.StartNew(() => { throw new Exception("Test"); });
    try
    {
    await fibonacciTask;
    }
    catch (Exception e)
    {
    MessageBox.Show(e.Message);
    }
    }


    تشکر
    آخرین ویرایش به وسیله SajjadKhati : سه شنبه 25 بهمن 1401 در 23:07 عصر

  5. #5

    نقل قول: مدیریت استثناء در نخ جدید

    مشکلی ندارد
    لینک
    https://dotnetfiddle.net/Bc6XVN

تاپیک های مشابه

  1. استخدام نویسنده و ویراستار متون برای سایت آشپزی و غذا
    نوشته شده توسط Mr.Ardeshir در بخش آگهی های استخدام
    پاسخ: 1
    آخرین پست: جمعه 17 فروردین 1397, 10:25 صبح
  2. آموزش: پرشین استخر،بزرگترین سایت آموزش ساخت استخر How Make Swimmin Pools-Persian Pool
    نوشته شده توسط soroushm در بخش آگهی‌ها
    پاسخ: 0
    آخرین پست: یک شنبه 12 شهریور 1396, 07:35 صبح
  3. در دسترس نبودن دیتابیس ها توسط سایت ولی قابل دسترس به صورت remote
    نوشته شده توسط silverfox در بخش مسائل مرتبط با نصب و راه اندازی
    پاسخ: 1
    آخرین پست: سه شنبه 25 مهر 1391, 10:29 صبح
  4. پاسخ: 2
    آخرین پست: دوشنبه 20 شهریور 1391, 08:06 صبح

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •