Пример в упомянутой статье действительно выглядит как let!
из асинхронных рабочих процессов.В общем, ключевое слово yield return
в C # позволяет кодировать шаблоны, похожие на выражения вычисления F # (странным образом, потому что он был разработан для создания перечислителей):
- Это также используется AsyncEnumerator , который (IMHO) проще, чем CCR, и немного ближе к асинхронным рабочим процессам F #
- Я написал статью , которая объясняет это сходство более подробно.
Я думаю, что ключевым отличием между асинхронными рабочими процессами CCR и F # является то, что CCR также включает библиотеки для параллельной передачи сообщений.См., Например, эту статью - он использует класс Port
(вы можете отправлять сообщения в порты) и Arbiter.Receive
, который является примитивом, который позволяет вам ждать сообщения от Port
.
В F # вы можете использовать MailboxProcessor
для реализации того же шаблона передачи сообщений, но это не встроенная часть асинхронных рабочих процессов F # - MailboxProcessor
реализовано с использованием асинхронногорабочие процессы.
В итоге : я думаю, что асинхронные рабочие процессы F # проще и концептуально яснее.Однако CCR и асинхронные рабочие процессы вместе с MailboxProcessor
реализуют примерно один и тот же шаблон программирования.