تنظیم وضعیت برای یک Task
در مثال ذکر شده در قسمت قبل هر چهار Task یک عبارت را در خروجی نمایش دادند حال میخواهیم هر Task پیغام متفاوتی را نمایش دهد.برای این کار از کلاس زیر استفاده میکنیم :
System.Action<object>
تنظیم وضعیت برای یک Task این امکان را فراهم میکند که بر روی اطلاعات مختلفی یک پروسه مشابه را انجام داد.
مثال :
namespace Listing_03 { class Listing_03 { static void Main(string[] args) { // use an Action delegate and a named method Task task1 = new Task(new Action<object>(printMessage),"First task"); // use a anonymous delegate Task task2 = new Task(delegate (object obj) { printMessage(obj); }, "Second Task"); // use a lambda expression and a named method // note that parameters to a lambda don�t need // to be quoted if there is only one parameter Task task3 = new Task((obj) => printMessage(obj), "Third task"); // use a lambda expression and an anonymous method Task task4 = new Task((obj) => { printMessage(obj); }, "Fourth task"); 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(object message) { Console.WriteLine("Message: {0}", message); } } }
کد بالا را بروش دیگری هم میتوان نوشت :
using System; using System.Threading.Tasks; namespace Listing_04 { class Listing_04 { static void Main(string[] args) { string[] messages = { "First task", "Second task", "Third task", "Fourth task" }; foreach (string msg in messages) { Task myTask = new Task(obj => printMessage((string)obj), msg); myTask.Start(); } // wait for input before exiting Console.WriteLine("Main method complete. Press enter to finish."); Console.ReadLine(); } static void printMessage(string message) { Console.WriteLine("Message: {0}", message); } } }
خروجی برنامه بالا بصورت زیر است :
Main method complete. Press enter to finish.
Message: Second task
Message: Fourth task
Message: First task
Message: Third task
Message: Second task
Message: Fourth task
Message: First task
Message: Third task
البته این خروجی برای شما ممکن است متفاوت باشد چون در سیستم شما ممکن است Task ها با ترتیب متفاوتی اجرا شوند.با کمک Task Scheduler برا حتی میتوان ترتیب اجرای Task ها را کنترل نمود.
0 نظرات:
ارسال یک نظر