Cuando sale F #, voy a tener una vergüenza de riquezas en el área de programación asincrónica/paralela. Un answer to this question hace un buen trabajo al describir las diferencias entre Tareas, Parallel LINQ y Reactive Framework, pero me preguntaba cómo encajan los flujos de trabajo asincrónicos en la imagen, exactamente.F #: Asynch y tareas y PLINQ, ¡oh mi!
Corrígeme si me equivoco, pero según entiendo, los flujos de trabajo de asincronización serán la forma más fácil de trabajar con operaciones vinculadas a IO, especialmente aquellas que tienen un método AsynchXxx definido, o seguir el BeginXxx/EndXxx patrón. Otra ventaja es que los flujos de trabajo de asincronización son compostables y pueden construirse a partir de otros flujos de trabajo de asincronización, lo que permite una gran flexibilidad en la estructura de un programa.
Creo que lo que necesito ayuda es entender bajo qué circunstancias elegiría tareas o PLINQ sobre flujos de trabajo asíncronos, en código F #. Creo que he leído que la Biblioteca de tareas paralelas tiene formas más sofisticadas de equilibrar la carga entre los núcleos. Si eso es cierto, entonces las Tareas podrían ser una mejor opción para las operaciones puramente vinculadas a la CPU que necesitan operar en paralelo. PLINQ, por otro lado, parece ser principalmente una forma conveniente de paralelizar código existente que funciona con secuencias.
Finalmente, asumiendo que mi comprensión de las fortalezas de cada enfoque es correcta, ¿es posible o recomendable combinarlas? Por ejemplo, quizás uno podría componer una serie de operaciones de flujos de trabajo asíncronos y luego transformarlas en Tareas antes de la ejecución. Si eso es posible, o incluso una buena idea.
Hmm, estoy seguro de que puede hacer algo con Async.StartAsTask y Async.AwaitTask – gradbot