Async F# مقابل CCR Framework
-
04-10-2019 - |
سؤال
بعد القراءة حول 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
تنفيذ تقريبا نفس نمط البرمجة.