Async f # против рамки CCR
-
04-10-2019 - |
Вопрос
После прочтения о CCR: http://www.infoq.com/news/2008/12/ccr. Я получаю впечатление, что это значительно точно так же, как F # async Blocks?
Вы даете Port.receive и Port.test, чтобы сделать то же самое, что и «пусть!».
Это правильно? И есть ли преимущества в CCR, что вы не получаете с F # Async?
Решение
Пример в статье, которую вы упомянули, действительно выглядит так же, как let!
от асинхронных рабочих процессов. В общем, yield return
Ключевое слово в C # позволяет кодировать шаблоны, аналогичные выражениям вычислений F # (странным образом, потому что он был разработан для создания перечисленных средств):
- Это также используется Asyncenumerator., который (ИМХО) проще, чем CCR и немного ближе к F # асинхронные рабочие процессы
- я написал статья Это объясняет этот симларты более подробно.
Я думаю, что ключевое различие между асинхронными рабочими процессами CCR и F # заключается в том, что CCR также включает в себя библиотеки для параллелизма передачи сообщений. Смотреть, например эта статья - оно использует Port
класс (вы можете отправлять сообщения на порты) и Arbiter.Receive
, что является примитивным, что позволяет вам ждать сообщения от Port
.
В f #, вы можете использовать MailboxProcessor
Для реализации одного и того же момента передача сообщений связи, но это не встроенная часть F # асинхронных рабочих процессов - MailboxProcessor
реализован с использованием асинхронные рабочие процессы.
В итоге: Я думаю, что F # асинхронные рабочие процессы проще и концептуально понятны. Тем не менее, CCR и асинхронные рабочие процессы вместе с участием MailboxProcessor
внедрить примерно одинаковый характер программирования.