Asíncrono F # vs. marco CCR
-
04-10-2019 - |
Pregunta
Después de leer sobre CCR: http://www.infoq.com/news/ 2008/12 / CCR Me da la impresión de que lo hace casi exactamente el mismo que el F # asíncrono bloques?
cedes port.Receive y port.Test con el fin de hacer lo mismo que "vamos!".
¿Es esto correcto? ¿Y hay algún beneficio en CCR que no se consigue con F # asíncrono?
Solución
El ejemplo en el artículo que usted ha mencionado realmente se parece a let!
de flujos de trabajo asincrónicos. En general, la palabra clave yield return
en C # hace posible patrones codifican similares a F expresiones # de cálculo (de una manera extraña, ya que fue diseñado para crear enumeradores):
- Esto también es utilizado por AsyncEnumerator , que es (en mi humilde opinión ) más simple de la CCR y un poco más cerca de F # asíncrono flujos de trabajo
- un artículo que explica este similartiy en más detalles.
Creo que la diferencia clave entre CCR y F # flujos de trabajo asíncrono es que CCR también incluye bibliotecas para la concurrencia de paso de mensajes. Véase, por ejemplo este artículo - que utiliza la clase Port
(puede enviar mensajes a los puertos) y Arbiter.Receive
, que es una primitiva que le permite esperar a que los mensajes de Port
.
En C #, se puede usar MailboxProcessor
para implementar el mismo patrón de comunicación de paso de mensajes, pero esto no es un sistema incorporado en parte de F # flujos de trabajo asíncrono -. Se implementa MailboxProcessor
usando flujos de trabajo asíncrono
En resumen : Creo que F # flujos de trabajo asíncronos son más simples y conceptualmente más clara. Sin embargo, CCR y los flujos de trabajo asíncrono juntos con MailboxProcessor
implementar más o menos el mismo patrón de programación.