[C#] Usando async-await en .net 4


Answers

Si está abierto a considerar otros lenguajes .Net, F # puede resolver su problema. Ha tenido la expresión de cálculo async {} durante años, y es compatible con versiones anteriores incluso con .Net 2.0. El requisito mínimo es Windows XP SP3. El tiempo de ejecución se puede descargar here .

Question

Actualmente estoy empezando a crear una aplicación que se beneficiaría mucho de la función async-await de C # 5. Pero no estoy seguro de qué versión de VS y del tiempo de ejecución asincrónico usar.

En cuanto a los gráficos de popularidad de OS, tendré que soportar Windows XP por otros tres años más o menos. Parece que .net 4.5 solo se ejecuta en las versiones más nuevas de Windows, por lo que debo apuntar a .net 4.0. Las máquinas de desarrollo usan Windows 7, por lo que usar una versión más nueva de VS no es un problema.

Ahora necesito elegir primero un compilador para hacer esto:

  • VS2010 con AsyncCTP
  • Vista previa VS2012 (y final una vez que llega), estableciendo el destino en .NET 4.0
  • Mono (Parece que 2.12 tiene async-await, prefiero / estoy acostumbrado a VS sobre MonoDevelop como IDE)

¿Cuál tiene menos errores de código gen? Mirando el blog de Jon Skeet, la Vista previa de VS2012 usa un generador de código nunca más que el CTP.

Y más importante aún, ¿qué tiempo de ejecución usar?

¿VS2012 contiene un tiempo de ejecución asincrónico redistribuible para usar con .net 4?

Logré compilar código, con la vista previa, al hacer referencia al tiempo de ejecución AsyncCTP. Pero dado que el CTP tiene condiciones de licencia desconocidas, no parece una buena solución a largo plazo.

¿O debería usar una implementación de un tercero? Tal vez mono tiene uno?

Para distribuir la biblioteca, prefiero simplemente poner el dll en el mismo directorio que la aplicación, en lugar de instalarlo de algún modo.

También me gustaría que mis binarios funcionen sin cambios en mono + Linux / MacOS. Por lo tanto, el tiempo de ejecución debe ser compatible con cualquier montura (2.12 probablemente) incorporada, o permitir su uso en sistemas operativos que no sean Windows.




Es posible usar el VS 12 beta para apuntar .NET 4.0 usando async / await.

Necesita copiar algún código en su proyecto que proporcione los tipos de los que depende el compilador.

Detalles here

Editar: hemos tomado esta técnica y la hemos convertido en una biblioteca de código abierto llamada AsyncBridge: https://nuget.org/packages/AsyncBridge