اذهب إلى المحتوى
  • 0

Task.WaitAll()  && Task.WaitAny

السؤال

Recommended Posts

  • 2
نشر

الطريقة WaitAll():
 هي طريقة ستاتيكية تستدعى لأجل الصف، دخلها مصفوفة عناصر من النمط Task، مهمتها إيقاف الأب، مثلاً لو استدعيناها في ال mian سيتم إيقافه (ينتظر) حتى تنفيذ كل التاسكات الموجودة ضمن هذه المصفوفة فقط .
مثال :
هنا مثال عن الطريقة فقط ، باعتبار الصف Test  صف يحوي طريقتين وهما MethodA تقوم بطباعة A خمسين مرة، والطريقة MethodB تطبع B خمسين مرة:

var  TaskA  = new Task.Factory.StartNew(Test.MethodA);
var  TaskB  = new Task.Factory.StartNew(Test.MethodB);
Task [] stopmain = { TaskA , TaskB };
Task.WaitAll(stopmain);

هنا سيتوقف ال  main  حتى يتم تنفيذ جميع ال task في المصفوفة stopmain.

For (int i=0 ; i<50;i++){ console.WriteLine("Main");}

الخرج : طباعة A و B خمسين مرة بشكل متداخل(ترتيب غير معلوم) ومن ثم طباعة Main خمسين مرة.
الطريقة WaitAny()  :
هي أيضا طريقة ستاتيكية و تقبل مصفوفة تاسكات كسابقتها اذاً هي شبيها بالطريقة السابقة ولكن لو استدعيناها في ال main مثلاً لن تنتظر انتهاء كل التاسكات، بل تنتظر انتهاء أول task وعند اكتمال تنفيذ هذا التاسك يستأنف ال main العمل بالتوازي مع التاسكات الأخرى
مع الملاحظة أن هذه الطريقة ترد قيمة وهي index يمثل موقع التاسك الذي انتهى من المصفوفة.
مثال :

var  TaskA  = new Task.Factory.StartNew(Test.MethodA);
var  TaskB  = new Task.Factory.StartNew(Test.MethodB);
Task [] stopmain = new Task[] { TaskA , TaskB };
Int id = Task.WaitAny(stopmain);

هنا سيتوقف ال  main  حتى يتم تنفيذ إحدى تاسكات المصفوفة  لا على التعيين و ترد هذه الطريقة ال index للتاسك الذي اكتمل تنفيذه أولاً إلى المتحول id ، حيث أن المصفوفة هنا تحوي عنصرين فال index إما 0 أو 1.

For (int i=0 ; i<50;i++){ console.WriteLine("Main");}

الخرج :
طباعة A خمسين مرة و طباعة B خمسين مرة بترتيب غير معلوم ولكن طباعة   الكلمة main لا تبدأ إلا بعد انتهاء طباعة إحدى العبارات "ِA" أو "B".

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...