۱۳۸۹/۱۰/۱۶

اصول برنامه نویسی موازی درNET. نسخه 4 بخش اول - 2


تنظیم وضعیت برای یک 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);

}

}

}


نکته مهم در کد بالا تبدیل اطلاعات وضعیت Task به رشته کاراکتری است که در عبارت لامبدا مورد استفاده قرار می‌گیرد. System.Action فقط با داده نوع object کار می کند.

خروجی برنامه بالا بصورت زیر است :
Main method complete. Press enter to finish.

Message: Second task

Message: Fourth task

Message: First task

Message: Third task

البته این خروجی برای شما ممکن است متفاوت باشد چون در سیستم شما ممکن است Task ها با ترتیب متفاوتی اجرا شوند.با کمک Task Scheduler برا حتی می‌توان ترتیب اجرای Task ها را کنترل نمود.
  • Digg
  • Sphinn
  • del.icio.us
  • Facebook
  • Google
  • Furl
  • Reddit
  • StumbleUpon
  • Donbaleh
  • Technorati
  • Balatarin
  • twitthis

0 نظرات:

ارسال یک نظر