سؤال

أنا أبحث في استخدام أي من الطرق المذكورة للتعامل مع العمليات طويلة المدى.

لن أخوض في التفاصيل ما الذي يمكن إنجازه باستخدام كل من هذه ، لكنني أفضل شرح ما أريد القيام به.

لدي مجموعة من الأساليب المتعلقة بـ HTTP ، حيث يسترجع كل منها بضع أجزاء من المعلومات. هذا كله جزء من نظام أكبر داخل خدمة طويلة الأمد (لذلك ليس هناك رمز رمي ، رمي).

بشكل عام ، ما هو النهج الأفضل ، التغليف والصيانة الحكيمة: التعامل مع البيانات التي تم إرجاعها عندما تكون جاهزة باستخدام آلية البداية/النهاية/Asynccallback ، أو عن طريق إطلاق الأحداث من داخل المهام ، مثل OnxxxReceived ، Onxxxerror ، باستخدام فصول EventArgs المشتقة لكل حدث؟

آمل أن أكون واضحًا بما فيه الكفاية .. قررت عدم تقديم عينات من التعليمات البرمجية ، لأنني مهتم أكثر بالآراء والتقدمين والمخاطر المحتملة ، أكثر من الحكايات من التنفيذ المحدد.

شكرًا!

هل كانت مفيدة؟

المحلول

بشكل عام ، تكون مهام TPL أسهل بكثير في الاستخدام. في حالتك ، قم بإنشائها باستخدام خيار مصنع وخيار طويل.

لست متأكدًا من الأحداث. لماذا لا تعالج الطلب/الاستجابة في حلقة أو شيء مشابه؟ أنت بالفعل على موضوع.

نصائح أخرى

يمكنك أيضًا استخدام عمليات الاستمرار لمعالجة البيانات بمجرد اكتمال مهمة الجلب.

    Task<StockDataCollection> loadFedHistoricalData =
        Task<StockDataCollection>.Factory.StartNew(
            () => LoadFedHistoricalData(),
            TaskCreationOptions.LongRunning);

    Task<StockDataCollection> normalizeHistoricalData =
        loadFedHistoricalData.ContinueWith(
            (t) => NormalizeData(t.Result));

في هذا الرمز ، تقوم مهمة LoadFedHistoricalData بتشغيل LoadFedHistoricalData وهي مهمة I/O طويلة المدى. عندما يعيد هذا ، يستمر بمهمة أخرى تقوم بتطبيع البيانات.

مستمر يأخذ معلمة TaskContinuationOptions التي يمكن استخدامها لتحديد ما إذا كانت مهمة الاستمرار تعمل دائمًا أو فقط في حالة استيفاء بعض الحالات مثل الخطأ أو الإلغاء.

يوضح مثال الفصل 5 A-Dash هذا النوع من النهج البديل في الحدث. يمكنك تنزيل الرمز من http://paralledpatterns.codeplex.com/. انظر إلى فصول التحليل والمواقع الرئيسية.

لا يمكنك ببساطة التغلب على نموذج البرمجة غير المتزامن (APM) عندما يتعلق الأمر بأداء I/O. في أي وقت يمكنك استخدامه ، يجب أن تكون كذلك. لحسن الحظ ، تأتي المكتبة الموازية للمهمة (TPL) مع الخبز لدعم الجمع بين عمل APM في المزيج مع مهام TPL "النقية" عبر طريقة مصنع FromAsync.

تحقق من هذا القسم من .NET SDK على MSDN بعنوان TPL والبرمجة غير المتزامنة .NET لمزيد من المعلومات حول كيفية الجمع بين هذين النموذجين للبرمجة لتحقيق Nirvana Async.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top