تمام سوالات سوالات بدون پاسخ سوال بپرسید

مفهومی بنام Task در 4.0#C اضافه شده است. اما این مورد چه مزیتی نسبت به استفاده از همان thread ها و ThreadPool دارد؟ آیا همان مفهوم با ظاهری دیگر و تبلیغاتی نیست؟

1 پاسخ

در واقع Task ها برای مدیریت بهتر کارها و زمانبندی های خاص برای آنها بکار گرفته می شوند. برای پیاده سازی آنها از ThreadPool استفاده شده است ولی با بکارگیری الگوریتم های بهینه سازی شده توان استفاده بهتر از منابع سیستم برای انجام این کار فراهم شده است. Task ها بصورت ریسمان های پس زمینه اجرا می شوند و قابلیت اجرای Async برای آنها پیش بینی شده است. از سوی دیگر امکانات کنترلی بیشتری برای کارها در نظر گرفته شده است. برای نمونه امکان انتظار یا لغو یک کار در حال انجام.
معمولاْ در برنامه ها نیازی به استفاده از زمانبند برای کارها وجود ندارد، اما در مواردی که قرار باشد این کار را برای کارها انجام دهیم، می توان از زمانبند پیش بینی شده در این سیستم استفاده کرد. نمونه ای از نحوه کاربرد Task در زیر می آید: (این کد از اینجا برداشته شده است.)

using System;
using System.Threading;
using System.Threading.Tasks;

class StartNewDemo
{
    // Demonstrated features:
    //      Task ctor()
    //      Task.Factory
    //      Task.Wait()
    //      Task.RunSynchronously()
    // Expected results:
    //      Task t1 (alpha) is created unstarted.
    //      Task t2 (beta) is created started.
    //      Task t1's (alpha) start is held until after t2 (beta) is started.
    //      Both tasks t1 (alpha) and t2 (beta) are potentially executed on threads other than the main thread on multi-core machines.
    //      Task t3 (gamma) is executed synchronously on the main thread.
    // Documentation:
    //      http://msdn.microsoft.com/en-us/library/system.threading.tasks.task_members(VS.100).aspx
    static void Main()
    {
    Action<object> action = (object obj) =>
    {
        Console.WriteLine("Task={0}, obj={1}, Thread={2}", Task.CurrentId, obj.ToString(), Thread.CurrentThread.ManagedThreadId);
    };

    // Construct an unstarted task
    Task t1 = new Task(action, "alpha");

    // Cosntruct a started task
    Task t2 = Task.Factory.StartNew(action, "beta");

    // Block the main thread to demonstate that t2 is executing
    t2.Wait();

    // Launch t1 
    t1.Start();

    Console.WriteLine("t1 has been launched. (Main Thread={0})", Thread.CurrentThread.ManagedThreadId);

    // Wait for the task to finish.
    // You may optionally provide a timeout interval or a cancellation token
    // to mitigate situations when the task takes too long to finish.
    t1.Wait();

    // Construct an unstarted task
    Task t3 = new Task(action, "gamma");

    // Run it synchronously
    t3.RunSynchronously();

    // Although the task was run synchrounously, it is a good practice to wait for it which observes for 
    // exceptions potentially thrown by that task.
    t3.Wait();
    }

}
toggle preview



آموزش زبان برنامه نویسی C#
آموزش jquery
آموزش برنامه نویسی
آموزش طراحی وبسایت
آموزش مدیریت وبسایت
آموزش جاوا Java
آموزش پایتون Python
آموزش سی شارپ C#‎
آموزش HTML و CSS
آموزش JavaScript جاوااسکریپت
آموزش jQuery جی کوئری
آموزش ساخت ربات تلگرام
آموزش برنامه‌نویسی PHP
آموزش برنامه‌نویسی اندروید
● آموزش‌های رایگان

سوالات مرتبط

راهنمای استفاده از ویرایشگر
  • *ایتالیک*‌ یا __ایتالیک__
  • **ضخیم** یا __ضخیم__
  • آدرس:[متن](http://url.com/ "عنوان")
  • عکس?![alt متن](/path/img.jpg "عنوان")
  • لیست عددی: 1. Foo 2. Bar
  • برای رفتن به خط بعد، هر جا مایلید که خط جدید شروع شود دو کاراکتر فاصله (space) قرار دهید
  • تگ‌های ساده HTML هم پشتیبانی می‌شوند

تگها:
  • ×47
  • ×41
  • ×32
  • ×32
  • پرسیده شده: 25 دسامبر '11, 19:50
  • بازدید: 4,054 بار
  • آخرین بروزرسانی: 26 دسامبر '11, 08:10

این سوال را دنبال کنیدتوسط ایمیل: ایمیل شما (باید معتبر باشد, هرگز به دیگران نمایش داده نمیشود):

هنگامی که شما به سیستم وارد شوید،قادر خواهید بود برای بروز رسانی ها مشترک شوید.


توسط RSS:

پاسخها

پاسخها و نظرها