¿La implementación asincrónica en C# 4.5 es exactamente la misma que en F # 2 en la forma en que se utilizan los subprocesos?¿Es asincrónico en C# la misma implementación que en F #?
Respuesta
Son diferentes. La diferencia principal es que C# usa el estándar .NET Task<T>
para representar cálculos asincrónicos mientras que F # usa su propio tipo llamado Async<T>
.
Más específicamente, las principales diferencias son: Método # asíncrono
CA crea un
Task<T>
que se inicia inmediatamente (caliente modelo de tarea), mientras que F # crea un cálculo que hay que empezar de forma explícita (generador modelo). Esto significa que los cómputos de F # son más fáciles de componer (puede escribir abstracciones de mayor nivel).En F # también obtiene un mejor control sobre cómo se inició el cálculo. Puede iniciar un cálculo usando
Async.Start
para iniciarlo en segundo plano oAsync.StartImmediate
para iniciarlo en el hilo actual.F flujos de trabajo # asíncronos apoyar cancelación automáticamente, así que no tienen que pasar
CancellationToken
alrededor.Tal vez otra consecuencia del primer punto es que F flujos de trabajo # asincrónicos también apoyan la cola-recursividad, para que pueda escribir los flujos de trabajo recursivas (esto no funcionaría fácilmente en C#, pero C# no utilizar este estilo de programación)
escribí un artículo más detallado sobre este tema: Asynchronous C# and F# (II.): How do they differ?
- 1. La implementación de la misma interfaz en diferentes instancias genéricas
- 2. Entrada en la misma línea que la salida en C#?
- 3. Cualquier implementación de R-Tree en F # (o C#)?
- 4. Implementación de la derivada en C/C++
- 5. es playframework verdaderamente asincrónico?
- 6. por qué "f = f ++" no es seguro en c?
- 7. Implementación de tipos fantasma en F #
- 8. es node.js 'console.log asincrónico?
- 9. Copia de archivo asincrónico/Mover en C#
- 10. CLR de F # y C# es lo mismo que por qué F # es más rápido que C#
- 11. Implementar "tail -f" en C++
- 12. ¿Console.dir() en javascript o firefox es asincrónico?
- 13. implementación de las funciones de cálculo, es decir, f (x), en la programación
- 14. F # rendimiento! operador - Implementación y posibles equivalentes de C#
- 15. implementación genérica en C
- 16. La implementación de tiempo de espera asincrónico utilizando pobres asíncrono Mans/esperan construcciones en .Net 4.0
- 17. ¿Cuál es la diferencia entre un delegado asincrónico y el método asincrónico?
- 18. lo que es :: * en C++
- 19. ¿Noy es asincrónico Node.js Array.map()?
- 20. XmlReader asincrónico en .NET?
- 21. ¿Es F # realmente mejor que C# para las matemáticas?
- 22. ¿Es posible sobrecargar la función en F #?
- 23. Acceso DLL asincrónico en LabVIEW?
- 24. ¿Cuál es la implementación más rápida de Dijkstra que conoces (en C++)?
- 25. IO asincrónico en Java?
- 26. Hacer stringWithContentsOfURL asincrónico - ¿Es seguro?
- 27. Mystical "F colon" en C#
- 28. F # List.map equivalente en C#?
- 29. memcpy asincrónico en Linux?
- 30. ¿Por qué mi aplicación C++ es más rápida que mi aplicación C (usando la misma biblioteca) en un Core i7
Muchas gracias! Pero, ¿cómo se usan los hilos debajo del capó? Don Syme señala en su libro 'Expert F #' que F # usa el salto de hilo. ¿Es esto lo mismo para C# o hay algunas diferencias? – Andries
En F #, cuando comienza en un subproceso con 'SynchronizationContext' específico (es decir, el subproceso de la GUI), el cálculo asincrónico salta de nuevo a este' SynchronizationContext'. No pude encontrar una documentación que diga cómo se comporta esto en C#, pero mis experimentos muestran que se comporta de la misma manera, es decir, si comienzas a 'esperar' en un hilo de la GUI, entonces el resto de tu computación se ejecutará en el hilo GUI (incluso si la computación que está esperando ejecuta la continuación en otro hilo). –
@TomasPetricek Una vez más, excelente información sobre F #. –