تحديد متى يتم تنفيذه نقش غير متزامن يستند إلى حدث

غير متزامن تستند إلى حدث نقش يوفر نقش لكشف سلوك غير متزامنة لفئة. وبواسطة هذا نقش، .NET Frameworkيعرف محاذيين لكشف غير متزامن سلوك: نقش غير متزامن استناداً إلى System.IAsyncResultواجهة، وتستند إلى حدث النقش. Th هو يصف الموضوع عند ذلك هو المناسب لتنفيذ كل من النقوش.

لمزيد من المعلومات حول البرمجة غير متزامنة مع IAsyncResultالواجهة، راجع غير متزامن برمجة تصميم نقوش.

عام مبادئ

في عامة، يجب أن يقوم الكشف عن ميزات غير متزامنة usفيg يستند إلى حدث "غير متزامن نقش" كلما أمكن ذلك. ومع ذلك، فهناك بعض المتطلبات التي تستند إلى حدث نقش لا تفي. وفي تلك الحالات، قد تحتاج إلى تنفيذ IAsyncResultنقش بالإضافة إلى نمط تستند إلى حدث.

ملاحظةملاحظة

ونادر ل IAsyncResultنمط تطبيقه بدون أيضا تم تطبيق نمط تستند إلى حدث.

إرشادات

وتصف القائمة التالية لمتى يجب تطبيق يستند إلى حدث "غير متزامن نقش" الإرشادات:

  • استخدم the حدث-based نقش كـ the الافتراضي API إلى expose غير متزامن سلوك for your فئة.

  • Do not expose the IAsyncResult نقش when your فئة هو primarily used في a العميل تطبيق, for مثال Windows Forms.

  • فقط expose the IAsyncResult نقش when it هو necessary for meeting your requirements. For مثال, توافق مع an موجود API may require you إلى expose the IAsyncResult نقش.

  • Do not expose the IAsyncResult نقش without also exposing the حدث-based نقش.

  • If you must expose the IAsyncResult نقش, do so كـ an متقدم خيار. For مثال, if you توليد a proxy كائن, توليد the حدث-based نقش بواسطة الافتراضي, مع an خيار إلى توليد the IAsyncResult نقش.

  • بنية your حدث-based نقش implementation تشغيل your IAsyncResult نقش implementation.

  • Avoid exposing كلاهما the حدث-based نقش و the IAsyncResult نقش تشغيل the same فئة. Expose the حدث-based نقش تشغيل “higher المستوى” فئات و the IAsyncResult نقش تشغيل “lower المستوى” فئات. For مثال, يقارن the حدث-based نقش تشغيل the WebClient مكوّن مع the IAsyncResult نقش تشغيل the HttpRequest فئة.

    • Expose the حدث-based نقش و the IAsyncResult نقش تشغيل the same فئة when توافق يتطلب it. For مثال, if you have already released an API that uses the IAsyncResult نقش, you would need to retain the IAsyncResult نقش for إلى الخلف توافق.

    • Expose the حدث-based نقش و the IAsyncResult نقش تشغيل the same فئة if the resulting كائن model complexity outweighs the benefit of separating the implementations. It هو better إلى expose كلاهما أنماط تشغيل a مفرد فئة than إلى avoid exposing the حدث-based نقش.

    • If you must expose كلاهما the حدث-based نقش و IAsyncResult نقش تشغيل a مفرد فئة, استخدم EditorBrowsableAttribute التعيين إلى Advanced إلى mark the IAsyncResult نقش implementation كـ an متقدم ميزة. This indicates إلى تصميم environments, such كـ Visual Studio IntelliSense, not إلى عرض the IAsyncResult خصائص و وظائف. These خصائص و وظائف are still fully usable, but the developer working through IntelliSense has a clearer عرض of the API.

خصائص for Exposing the IAsyncResult نقش في Addition إلى the حدث-based نقش

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

هناك ثلاث وحدات السيناريو التي لم تتناول النقش event-bكـed كـ أيضا كـ IAsyncResultنقش:

  • حظر الانتظار تشغيل واحدة IAsyncResult

  • حظر الانتظار تشغيل العديد من IAsyncResultالكائنات

  • للاستقصاء عن إتمام تشغيل IAsyncResult

يمكنك معالجة هذه السيناريوهات بواسطة استخدام نمط تستند إلى حدث، ولكن ذلك هو cumbersome أكثر من استخدام IAsyncResultنقش.

المطورين غالباً استخدم IAsyncResultنقش للخدمات التي عادة ما يكون لأداء عالي جداً متطلبات. على سبيل المثال، عملية التحقق لسيناريو الإكمال هو تقنية ملقم ذات الأداء العالي.

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

توضح القائمة التالية بعض التوصيات إلى اتبع إذا قررت إلى استخدام IAsyncResultنقش:

  • فقط يعرض IAsyncResultنقش عندما تتطلب دعم بشكل خاص WaitHandleأو IAsyncResultالكائنات.

  • كشف فقط IAsyncResultنقش عندما يكون لديك موجود API التي تستخدم IAsyncResultنقش.

  • إذا كان لديك API موجودة استناداً إلى IAsyncResultنقش، خذ بعين الاعتبار أيضا تعريض نقش تستند إلى حدث في البريد الإصدار التالي.

  • كشف فقط IAsyncResultنقش إذا كانت لديك متطلبات الأداء العالي التي تم التحقق منها لا يمكن أن تتحقق بنمط تستند إلى حدث ولكن يمكن أن تتحقق IAsyncResultالنقش.

راجع أيضًا:

المهام

الإرشادات التفصيلية: تنفيذ مكونات التي تعتمد حدث-إلى نقش غير متزامن

المبادئ

تطبيق حدث-إلى نقش غير متزامن

أفضل الممارسات لتطبيق حدث-إلى نقش غير متزامن

نظرة عامة تستند إلى حدث غير متزامن نقش حول

موارد أخرى

غير متزامن برمجة تصميم نقوش

ذات مؤشرات ترابط متعددة البرمجة بالأحداث المستندة إلى نمط غير متزامن