1
2
6
24
120
720
5040
40320
Shu bilan birga, parallel operatsiyada buyurtma berish qo'shimcha xarajatlarning oshishiga olib kelishini tushunish kerak, shuning uchun bunday so'rov tartibsizdan ko'ra sekinroq ishlaydi. Va agar topshiriq buyurtma qilingan to'plamni qaytarishni talab qilmasa, AsOrdered usulidan foydalanmaslik yaxshiroqdir.
Bundan tashqari, agar dastur natijaviy to'plamni manipulyatsiya qilmoqchi bo'lsa, lekin buyurtma qilish endi talab qilinmasa, biz AsUnordered() usulidan foydalanishimiz mumkin:
var factorials = from n in numbers.AsParallel().AsOrdered()
where n >0
select Factorial(n);
var query = from n in factorials.AsUnordered()
where n > 100
select n;
3. Xatolarni qayta ishlash va operatsiyani bekor qilish.
Parallel operatsiyalarni bajarishda xatolar ham paydo bo'lishi mumkin, ularning ishlashi o'ziga xos xususiyatlarga ega. Parallel ishlov berishda yig'ish qismlarga bo'linadi va har bir qism alohida ipda qayta ishlanadi. Biroq, agar iplardan birida xatolik yuzaga kelsa, tizim barcha iplarning bajarilishini to'xtatadi.Istisnolar tashlanganida, ularning barchasi bitta AggregateExceptionga birlashtiriladi.
Masalan, obyektlar massivi faktorial usulga o‘tkazildi deylik, u nafaqat raqamlarni, balki satrlarni ham o‘z ichiga oladi:
object[] numbers2 = new object[] { 1, 2, 3, 4, 5, "hello" };
var factorials = from n in numbers2.AsParallel()
let x = (int)n
select Factorial(x);
try
{
factorials.ForAll(n => Console.WriteLine(n));
}
catch (AggregateException ex)
{
foreach (var e in ex.InnerExceptions)
Do'stlaringiz bilan baham: |