سؤال

بعد القراءة حول CCR: http://www.infoq.com/news/2008/12/ccr لدي انطباع بأنه يفعل إلى حد كبير نفس كتل F# Async؟

يمكنك إنتاج Port.Receive و Port.test من أجل القيام بنفس الشيء مثل "Let!".

هل هذا صحيح؟ وهل هناك أي فوائد في CCR لا تحصل عليها مع F# Async؟

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

المحلول

المثال في المقالة التي ذكرتها تبدو حقًا مثل let! من سير العمل غير المتزامن. بشكل عام ، yield return تجعل الكلمة الرئيسية في C# من الممكن تشفير أنماط مماثلة لتعبيرات الحساب F# (بطريقة غريبة ، لأنه تم تصميمه لإنشاء العدادات):

  • يستخدم هذا أيضًا بواسطة عدم التزامن, ، وهو (IMHO) أبسط من CCR وأقرب قليلاً من سير العمل غير المتزامن f#
  • كتبت مقالة وهذا ما يفسر هذا similartiy بمزيد من التفاصيل.

أعتقد أن الفرق الرئيسي بين سير العمل غير المتزامن CCR و F# هو أن CCR يتضمن أيضًا مكتبات لتوافق تمرير الرسائل. انظر على سبيل المثال هذه المقالة - يستخدم Port الفصل (يمكنك إرسال رسائل إلى المنافذ) و Arbiter.Receive, ، وهو بدائي يسمح لك بانتظار الرسائل من Port.

في F#، يمكنك استخدام MailboxProcessor لتنفيذ نفس نمط اتصال الرسائل ، ولكن هذا ليس جزءًا مدمجًا من سير العمل غير المتزامن F#- MailboxProcessor تم تنفيذه استخدام سير العمل غير المتزامن.

في تلخيص: أعتقد أن سير العمل غير المتزامن F# أبسط وأكثر وضوحًا من الناحية المفاهيمية. ومع ذلك ، CCR وسير العمل غير المتزامن معاً مع MailboxProcessor تنفيذ تقريبا نفس نمط البرمجة.

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