بدون هیچ مطلب اضافی به سراغ اولین مثال می رویم. قطعه کد زیر را در نظر بگیرید :
در کد بالا کلاس Task نقش اصلی را بازی می کند.این کلاس قلب کتابخانه برنامه نویسی Task یا
Task Programming Library می باشد.
در این بخش با موارد زیر در مورد Task ها آشنا می شویم:
- ایجاد و به کار انداختن انواع مختلف Task ها.
- کنسل کردن Task ها.
- منتظر شدن برای پایان یک Task.
- دریافت خروجی یا نتیجه از یک Task پایان یافته.
- مدیریت خطا در طول انجام یک Task
خب بهتر است به شرح کد بالا بپردازیم:
رای استفاده از کلاس Task باید فضای نام System.Threading.Tasks را بصورت ریر مورد استفاده قرار دهیم.
این فضای نام نقش بسیار مهمی در برنامه نویسی Task ها دارد . فضای نام بعدی معروف است :
System.Threading . اگر با برنامه نویسی ترید ها بروش مرسوم وکلاسیک آشنایی دارید قطعاً با این فضای نام آشنایی دارید. اگر بخواهیم با چندین Task بطور همزمان کار کنیم به این فضای نام نیاز مبرم داریم. پس :
خب رسیدیم به بخش مهم برنامه :
متد استاتیک Task.Factory.StartNew یک Task جدید را ایجاد و شروع میکند که متن Hello Word را در خروجی کنسول نمایش می دهد. این روش سادهترین راه برای ایجاد و شروع یک Task است.
در بخشهای بعدی چگونگی ایجاد Task های پیچیدهتر را بررسی خواهیم کرد . خروجی برنامه بالا بصورت زیر خواهد بود:
روشهای مختلف ایجاد یک Task ساده :
- ایجاد کلاس Task با استفاده از یک متد دارای نام که در داخل یک کلاس Action صدا زده می شود. مثال :
- استفاده از یک delegate ناشناس (بدون نام). مثال :
- استفاده از یک عبارت لامبدا و یک متددارای نام . مثال :
- استفاده از یک عبارت لامبدا و یک متد ناشناس (بدون نام). مثال :
قطعه کد زیر مثال خوبی برای چهار روشی که در بالا شرح دادیم می باشد:
خروجی برنامه بالا بصورت زیر است :
Main method complete. Press enter to finish.
Hello World
Hello World
Hello World
Hello World
کته 1 : از مند استاتیک Task.Factory.StartNew برای ایجاد Task هایی که رمان اجرای کوتاه دارند استفاده می شود.
نکته 2 : اگر یک Taskدر حال اجرا باشد نمیتوان آنرا دوباره استارت نمود باید برای یک نمونه جدید از آن Task ایجاد نمود و آنرا استارت کرد.
using System; using System.Threading.Tasks; namespace Listing_01 { class Listing_01 { static void Main(string[] args) { Task.Factory.StartNew(() => { Console.WriteLine("Hello World"); }); // wait for input before exiting Console.WriteLine("Main method complete. Press enter to finish."); Console.ReadLine(); } } }
در کد بالا کلاس Task نقش اصلی را بازی می کند.این کلاس قلب کتابخانه برنامه نویسی Task یا
Task Programming Library می باشد.
در این بخش با موارد زیر در مورد Task ها آشنا می شویم:
- ایجاد و به کار انداختن انواع مختلف Task ها.
- کنسل کردن Task ها.
- منتظر شدن برای پایان یک Task.
- دریافت خروجی یا نتیجه از یک Task پایان یافته.
- مدیریت خطا در طول انجام یک Task
خب بهتر است به شرح کد بالا بپردازیم:
رای استفاده از کلاس Task باید فضای نام System.Threading.Tasks را بصورت ریر مورد استفاده قرار دهیم.
using System.Threading.Tasks;
این فضای نام نقش بسیار مهمی در برنامه نویسی Task ها دارد . فضای نام بعدی معروف است :
System.Threading . اگر با برنامه نویسی ترید ها بروش مرسوم وکلاسیک آشنایی دارید قطعاً با این فضای نام آشنایی دارید. اگر بخواهیم با چندین Task بطور همزمان کار کنیم به این فضای نام نیاز مبرم داریم. پس :
using System.Threading;
Task.Factory.StartNew(() => { Console.WriteLine("Hello World"); });
در بخشهای بعدی چگونگی ایجاد Task های پیچیدهتر را بررسی خواهیم کرد . خروجی برنامه بالا بصورت زیر خواهد بود:
Main method complete. Press enter to finish.
Hello World
Hello World
روشهای مختلف ایجاد یک Task ساده :
- ایجاد کلاس Task با استفاده از یک متد دارای نام که در داخل یک کلاس Action صدا زده می شود. مثال :
Task task1 = new Task(new Action(printMessage));
Task task2 = new Task(delegate { printMessage(); });
- استفاده از یک عبارت لامبدا و یک متددارای نام . مثال :
Task task3 = new Task(() => printMessage());
Task task4 = new Task(() => { printMessage(); });
قطعه کد زیر مثال خوبی برای چهار روشی که در بالا شرح دادیم می باشد:
using System; using System.Threading.Tasks; namespace Listing_02 { class Listing_02 { static void Main(string[] args) { // use an Action delegate and a named method Task task1 = new Task(new Action(printMessage)); // use a anonymous delegate Task task2 = new Task(delegate { printMessage(); }); // use a lambda expression and a named method Task task3 = new Task(() => printMessage()); // use a lambda expression and an anonymous method Task task4 = new Task(() => { printMessage(); }); task1.Start(); task2.Start(); task3.Start(); task4.Start(); // wait for input before exiting Console.WriteLine("Main method complete. Press enter to finish."); Console.ReadLine(); } static void printMessage() { Console.WriteLine("Hello World"); } } }
Main method complete. Press enter to finish.
Hello World
Hello World
Hello World
Hello World
کته 1 : از مند استاتیک Task.Factory.StartNew برای ایجاد Task هایی که رمان اجرای کوتاه دارند استفاده می شود.
نکته 2 : اگر یک Taskدر حال اجرا باشد نمیتوان آنرا دوباره استارت نمود باید برای یک نمونه جدید از آن Task ایجاد نمود و آنرا استارت کرد.
2 نظرات:
مرسی از مقاله ی خوبت اما Task Programming Language غلط هست.TPL مخفف Task Parallel Library هست.
موفق باشی.
سلام
ممنون از نظرتون.
اصلاح شد.
ارسال یک نظر