دریافت نتیجه از یک Task
برای دریافت نتیجه از فرایند در حال انجام در قالب یک Task کافی است یک نمونه از کلاس زیر ساخته شود :
T در اینجا نوع متغیری است که از درون Task بازگردانده می شود.برای خواندن مقدار خروجی باید خصوصیت Result از کلاس Task را مورد استفاده قرار دهیم.
مثال :
البته خواندن نتیجه Task تا زمان پایان یافتن آن طول خواهد کشید یعبارت دیگر در مثال فوق تا زمانی که Task اول پایان نیابد Task دوم آغاز نخواهد شد چون ما قبل از صدا کردن Task دوم از Task اول تقاضای نتیجه کرده ایم.
روش دیگر برای ایجاد Task های دارای نتیجه استفاده از متد استاتیک Task.Factory.StartNew می باشد.مثال:
چند تنظیم برای ایجاد Task ها :
با استفاده از گزینه هایTaskCreationOptions میتوان در هنگام ایجاد یک Task تنظیمات مفیدی را به آن اعمال نمود.
None : تنظیمات پیشفرض را به Task ایجاد شده اعمال می کند.
LongRunning : تعیین میکند که Task زمان اجرای طولانی دارد.
AttachedToParent : تعیین میکند که این یک Task فرزند است که به یک Task والد وابستگی دارد.
خصوصیت Task.CurrentId یک عدد منحصربفرد صحیح است که Task فعلی را مشخص می کند. این خصوصیت در خارج از بدنه Task نال می باشد.
برای دریافت نتیجه از فرایند در حال انجام در قالب یک Task کافی است یک نمونه از کلاس زیر ساخته شود :
Task<T>
مثال :
using System; using System.Threading.Tasks; namespace Listing_05 { class Listing_05 { static void Main(string[] args) { // create the task Task<int> task1 = new Task<int>(() => { int sum = 0; for (int i = 0; i < 100; i++) { sum += i; } return sum; }); // start the task task1.Start(); // write out the result Console.WriteLine("Result 1: {0}", task1.Result); // create the task using state Task<int> task2 = new Task<int>(obj => { int sum = 0; int max = (int)obj; for (int i = 0; i < max; i++) { sum += i; } return sum; }, 100); // start the task task2.Start(); // write out the result Console.WriteLine("Result 2: {0}", task2.Result); // wait for input before exiting Console.WriteLine("Main method complete. Press enter to finish."); Console.ReadLine(); } } }
البته خواندن نتیجه Task تا زمان پایان یافتن آن طول خواهد کشید یعبارت دیگر در مثال فوق تا زمانی که Task اول پایان نیابد Task دوم آغاز نخواهد شد چون ما قبل از صدا کردن Task دوم از Task اول تقاضای نتیجه کرده ایم.
روش دیگر برای ایجاد Task های دارای نتیجه استفاده از متد استاتیک Task.Factory.StartNew می باشد.مثال:
using System; using System.Threading.Tasks; namespace Listing_06 { class Listing_06 { static void Main(string[] args) { // create the task Task<int> task1 = Task.Factory.StartNew<int>(() => { int sum = 0; for (int i = 0; i < 100; i++) { sum += i; } return sum; }); // write out the result Console.WriteLine("Result 1: {0}", task1.Result); // wait for input before exiting Console.WriteLine("Main method complete. Press enter to finish."); Console.ReadLine(); } } }
چند تنظیم برای ایجاد Task ها :
با استفاده از گزینه هایTaskCreationOptions میتوان در هنگام ایجاد یک Task تنظیمات مفیدی را به آن اعمال نمود.
None : تنظیمات پیشفرض را به Task ایجاد شده اعمال می کند.
LongRunning : تعیین میکند که Task زمان اجرای طولانی دارد.
AttachedToParent : تعیین میکند که این یک Task فرزند است که به یک Task والد وابستگی دارد.
خصوصیت Task.CurrentId یک عدد منحصربفرد صحیح است که Task فعلی را مشخص می کند. این خصوصیت در خارج از بدنه Task نال می باشد.
0 نظرات:
ارسال یک نظر