دریافت نتیجه از یک 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 نظرات:
ارسال یک نظر