Actualmente estoy empezando a crear una aplicación que se beneficiaría mucho de la función de espera asíncrona de C # 5. Pero no estoy seguro de qué versión de VS y del tiempo de ejecución asíncrono usar.
Mirando las tablas de popularidad del sistema operativo, tendré que soportar Windows XP por otros tres años más o menos. Parece que .net 4.5 solo se ejecuta en versiones más nuevas de Windows, por lo que necesito 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 tengo que elegir primero un compilador para hacer esto:
- VS2010 con AsyncCTP
- Vista previa de VS2012 (y final una vez que llega), estableciendo el objetivo en .net 4.0
- Mono (Parece que 2.12 tiene espera asíncrona, prefiero / estoy acostumbrado a VS sobre MonoDevelop como IDE)
¿Cuál tiene menos errores de generación de código? Mirando el blog de Jon Skeet, la Vista previa de VS2012 utiliza un generador de código nunca más que el CTP.
¿Y más importante qué tiempo de ejecución utilizar?
¿VS2012 contiene un tiempo de ejecución asincrónico redistribuible para usar con .net 4?
Logré compilar código, con la vista previa, haciendo referencia al tiempo de ejecución AsyncCTP. Pero dado que el CTP tiene condiciones de licencia extrañas, no parece una buena solución a largo plazo.
¿O debería usar una implementación de terceros? Quizás mono tiene uno?
Para distribuir la biblioteca, prefiero simplemente colocar el dll en el mismo directorio que la aplicación, en lugar de algún tipo de instalador.
También me gustaría que mis archivos binarios funcionen sin cambios en mono + Linux / MacOS. Por lo tanto, el tiempo de ejecución debería ser compatible con lo que sea mono (2.12 probablemente) incorporado o permitir su uso en sistemas operativos que no sean Windows.
Respuestas:
Microsoft lanzó el Async Targeting Pack (Microsoft.Bcl.Async) a través de Nuget como reemplazo del AsyncCTP.
Puede leer más sobre esto aquí: http://blogs.msdn.com/b/bclteam/archive/2013/04/17/microsoft-bcl-async-is-now-stable.aspx .
Puede leer sobre la versión anterior aquí: http://blogs.msdn.com/b/lucian/archive/2012/04/24/async-targeting-pack.aspx .
Como este paquete es oficialmente compatible, ahora creo que la mejor opción para apuntar a XP + asincrónico sería usar Visual Studio 2012 + C # 5 + Async Targeting Pack.
Sin embargo, si siente la necesidad de apuntar a .NET 3.5, aún puede usar (my) AsyncBridge para .NET 3.5 .
fuente
Si está abierto a considerar otros idiomas .Net, F # puede resolver su problema. Ha tenido la expresión de cálculo asíncrono {} 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 aquí .
fuente
Es posible usar VS 12 beta para apuntar a .NET 4.0 usando async / await.
Debe copiar algún código en su proyecto que proporcione los tipos en los que se basa el compilador.
Detalles aquí
Editar: hemos tomado esta técnica y la hemos convertido en una biblioteca de código abierto llamada AsyncBridge: https://nuget.org/packages/AsyncBridge
fuente
Si desea poder distribuir su software, creo que la solución Mono es realmente su única opción en este momento. También dice que desea que el resultado final se ejecute en Mono sobre Linux y OS X. Para empezar, apuntar a Mono parece ser la solución natural.
Su próximo problema es el IDE. MonoDevelop obviamente funcionaría bien, pero usted dice que prefiere Visual Studio.
Greg Hurlman creó un perfil para codificar contra Mono 2.8 de Visual Studio. Si haces un seguimiento con él, él podría indicarte la dirección correcta para desarrollar contra Mono 2.11 / 2.12 en Visual Studio.
Por supuesto, también hay Mono Tools para Visual Studio, que es un producto comercial. Supongo que Xamarin todavía lo ofrece .
También es posible que pueda ejecutar los ensamblados de perfil 4.5 necesarios desde Mono sobre .NET, pero no lo he intentado. El perfil 4.5 es un superconjunto estricto de la API 4.0. Tal vez intentarlo e informar de nuevo.
EDITAR: Parece que ahora puede usar Visual Studio Async CTP en producción ahora
Esto es lo que dice en la página de descarga :
fuente
Async...Builder
y...Awaiter
) son muy difíciles de separar del resto de mono. Actualmente estoy buscando volver a implementarAsyncCtpLibrary
, posiblemente tomando prestado un poco de mono.AsyncCtpLibrary
, sé que en principio es posible, pero para uno la licencia contiene algunas cláusulas extrañas. Pero mi problema principal aquí es lo que sucede a largo plazo. Si deja de ser compatible y nadie solucionó errores, podría ser molesto.Si desea comenzar a distribuir su software después de que MS lance C # 5.0, puede comenzar a desarrollar usando AsycnCTP. De lo contrario, no recomendaría que lo use, ya que es solo CTP, ni siquiera una versión beta. Se puede cambiar mucho cerca de la etapa beta y del lanzamiento. Puede ser inestable, etc.
Si desea introducir operaciones asíncronas sencillas en su aplicación, le recomendaría que use Extensiones Reactivas y cosas integradas en la parte superior (IU Reactiva, etc.), es simplemente hermoso.
En cuanto a VS2012, también contiene el mismo Async CTP por lo que recuerdo de mi // Build / tablet MS que me dio en esa conferencia.
fuente