Вопрос

После прочтения о 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 внедрить примерно одинаковый характер программирования.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top