c# - لماذا البرنامج التعليمي إف 6 استخدام المكالمات أكرونوس؟




asp.net-mvc entity-framework (2)

أحدث البرنامج التعليمي إف الذي يمر من خلال كيفية استخدام إف 6 مع مفك 5 يبدو أن تميل نحو استخدام أسيش يدعو إلى قاعدة البيانات مثل:

Department department = await db.Departments.FindAsync(id);

هل هذا هو المعيار الجديد / أفضل الممارسات؟

أنا لست متأكدا ما هي الفائدة لهذا النمط من التنمية مع ASP.NET مفك.

هل يمكن لشخص ما التعليق على هذا النمط، هل هذا هو المعيار الجديد الذي يشجعه مرض التصلب العصبي المتعدد؟


على ASP.NET، يجب عليك استخدام واجهات برمجة التطبيقات غير المتزامنة لأي شيء I / O ذات الصلة، بما في ذلك الوصول إلى قاعدة البيانات ومكالمات خدمة ويب.

يسمح استخدام async ASP.NET لتحقيق أقصى استفادة من تجمع الترابط، مما يؤدي إلى فوائد غير تافهة التدرجية.


من أجل تقرير ما إذا كنت تريد أن تذهب غير متزامنة أو مزامنة، مقارنة الفوائد والتكاليف:

المتزامن:

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

مزامنة:

  • رمز أبسط: تنتظر يجعل 99٪ من الحالات (تقريبا) بسيطة مثل رمز متزامن. ومع ذلك، فإن الأسئلة 10+ غير المتكافئة كل يوم على المكدس تجاوز يتحدث لغة مختلفة. تنشأ حالات إدج عند الانحراف عن المسار البسيط. أيضا عند استخدام المكتبات القديمة التي، على سبيل المثال، تتطلب منك تسليمها استدعاء متزامن.
  • عمل أقل للترميز والتصحيح
  • الملف الشخصي ودية (يمكنك تعريف التطبيق أو مجرد وقفة المصحح ونرى ما هو التطبيق يفعل الآن.لا يمكن مع الخلل).
  • إنتيروبيراتس تماما مع رمز القديمة والمكتبات

اختيار غير متزامن مع ASP.NET إذا كنت تتصل بخدمات الكمون عالية. من المرجح أن تكون خدمة الويب عالية زمن الاستجابة. غالبا ما تكون قاعدة بيانات أولتب منخفضة الكمون.

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

خدمات نموذجية عالية الكمون (حالات جيدة لغير متزامنة):

  • خدمات الويب
  • الانتظار (مثل النوم)
  • ثروتلينغ ( SemaphoreSlim ، ...)
  • بعض الخدمات السحابية (أزور)
  • الاستعلامات طويلة المدى لقاعدة البيانات (مثل التقارير أو إيتل)

خدمات نموذجية منخفضة الكمون (حالات جيدة للمزامنة):

  • اتصالات قاعدة البيانات: معظم استعلامات أولتب منخفضة الكمون لأنه يمكنك افتراض أن ملقم قاعدة البيانات لا تكون مثقلة. لا توجد نقطة في رمي 100s من الاستفسارات المتزامنة في ذلك. لا تجعلها كاملة أي أسرع.
  • نظام الملفات: نفس قواعد البيانات.

وتصنف هذه الحالات حسب الحالة النموذجية . كل هذه يمكن أن تكون في فئة المعاكس كذلك.

يمكنك مزامنة المزامنة و أسينك في نفس التطبيق. استخدام غير متزامن عندما يكون في بقعة حلوة لها.

فلماذا تقوم ميكروسوفت وفريق إطار الكيان بتشجيع الاستخدام غير المتزامن؟ هنا يأتي الجزء الشخصي من هذه الإجابة: قد يكون لي مايكروسوفت السياسة الداخلية. قد تتوقع استخدام إف في تطبيقات العميل (التي غير متزامنة كبيرة). أو أنها لا تدرك أن المكالمات قاعدة البيانات غير المتزامنة هي دائما تقريبا تقريبا مضيعة للوقت المطور دون فوائد. معظم الناس لا يدركون ذلك لأن غير المتزامن هو الطريق للذهاب في هذه الأيام.





async-await