ما هو ConfigureAwait؟
ما هو ConfigureAwait؟

فيديو: ما هو ConfigureAwait؟

فيديو: ما هو ConfigureAwait؟
فيديو: Which do I use, ConfigureAwait True or False? 2024, شهر نوفمبر
Anonim

تكوين (خطأ) يتضمن مهمة تم إكمالها بالفعل بحلول الوقت الذي ينتظرها (وهو أمر شائع بشكل لا يصدق في الواقع) ، ثم تكوين (خطأ) سيكون بلا معنى ، حيث يستمر الخيط في تنفيذ الكود في الطريقة بعد ذلك ولا يزال في نفس السياق الذي كان موجودًا سابقًا.

بعد ذلك ، قد يتساءل المرء أيضًا ، ما فائدة ConfigureAwait false؟

تكوين ( خاطئة ) يقوم بتكوين المهمة بحيث لا يتم تشغيل المتابعة بعد الانتظار في سياق المتصل ، وبالتالي تجنب أي توقفات محتملة.

بجانب ما ورد أعلاه ، ما هو SynchronizationContext؟ SynchronizationContext هو تمثيل للبيئة الحالية التي يعمل بها الكود الخاص بنا. أي ، في برنامج غير متزامن ، عندما نفوض وحدة عمل إلى مؤشر ترابط آخر ، فإننا نلتقط البيئة الحالية ونخزنها في مثيل SynchronizationContext ووضعه على كائن المهمة.

مع وضع ذلك في الاعتبار ، ما فائدة ConfigureAwait؟

استخدام تكوين (خطأ) لتجنب المآزق هو ممارسة خطيرة. سيكون لديك ل استخدم ConfigureAwait (خطأ) لكل انتظار في الإغلاق الانتقالي لجميع الطرق التي يستدعيها كود الحظر ، بما في ذلك جميع رموز الطرف الثالث والثاني. استخدام تكوين (خطأ) لتجنب الجمود هو في أحسن الأحوال مجرد اختراق).

ما هو GetAwaiter؟

GetAwaiter () تقوم بإرجاع مثيل له أسلوب GetResult (). عند استخدامه في مهمة معيبة ، فإن GetResult () سينشر الاستثناء الأصلي (هذه هي الطريقة التي يحصل بها "انتظار المهمة ؛" على سلوكه). GetResult () لأنه يحافظ على استثناءات المهام بدلاً من التفافها في AggregateException.