2011-11-17 26 views
10

Estoy empezando a leer sobre .NET 4.5 Async pero, francamente, no puedo obtener el máximo provecho cuando se trata del patrón de uso. Así que trataré de obtenerlo con una pregunta directa:.NET 4.5 Async vs. TPL

Normalmente utilizo .NET 4 TPL para llamar a costosos servicios web y llamadas a bases de datos desde mi aplicación ASP.NET. Parece que puedo lograr lo mismo con Async. ¿Es esto cierto? ¿Cuándo usar qué?

Gracias de antemano.

Respuesta

15

TPL es una biblioteca para informática paralela. .NET 4.5 async es una función de idioma, construida sobre TPL, que facilita el proceso. Esto es especialmente cierto cuando tiene flujos de trabajo con varios pasos.

En pocas palabras, async le permite escribir su código como si fuera síncrono, por lo que el flujo lógico permanece intacto. El proceso de esperar que se complete una tarea, ejecutando un código específico cuando eso sucede, se puede hacer de una manera muy natural con async. Los compiladores C# 5.0 y VB 11.0 transforman su código en el código equivalente de C# 4.0 y VB 10.0 utilizando TPL y algunos nuevos tipos relacionados con async.

Para una excelente explicación debajo de la capucha de async, consulte la serie de blog de Jon Skeet Eduasync.

Entonces, ¿cómo decides qué usar? Bueno, async básicamente abstrae todas las complejidades de crear una secuencia de fragmentos de código que están encadenados junto con llamadas asincrónicas. Presumiblemente, cuando llamas a un servicio web o accedes a una base de datos, quieres hacer algo con lo que se devuelve. async le permite agrupar el código de llamada y procesamiento, lo que debería hacer que su código sea más fácil de escribir y también más fácil de leer más adelante.

+0

gracias jeffrey por la respuesta, pero todavía no puede decir cuándo usar qué ...digamos, por ejemplo, en el ejemplo de llamada al servicio web. –

+1

Usar asincrónico. Si encuentra algo que no puede completar con la sincronización, siga adelante y use TPL. Si eso no estaba claro Esto debe seleccionarse como la respuesta, ya que es una explicación clara y concisa. – BentOnCoding

-1

Supongo que internamente tanto .Net TPL como async, usa subprocesos de subprocesos. Async podría ser una sintaxis simplificada para el patrón BeginXXX/EndXXX convencional.

Pero lo más importante es que TPL utiliza el hilo de subprocesos y no debe usarlo para realizar operaciones costosas, ya que el mismo marco utiliza los mismos subprocesos. Si tiene una operación costosa (como ha mencionado), entonces es mejor crear un nuevo hilo autónomo o configurar la propiedad "LongRunning" de ThreadSchedular para cuando use TPL.

+4

costosa E/S! = Costosa CPU –

0

@Pawan sobre el BeginXXX/EndXXX: Creo que estás mezclando las cosas. Mirando hacia C#, hay 3 diferentes patterns de ejecutar código paralelo:

  • Deprecated: asíncrono modelo de programación (APM)
  • Deprecated: basada en eventos asíncronos Patrón (EAP)
  • Up-to-Date : Patrón asincrónico basado en tareas (TAP)

TPL es la base sobre la que se construye el TAP. TPL se introdujo en .NET 4. Altough TPL y TAP se utilizan de alguna manera por igual en Microsoftdocumentation. De cualquier manera, el async/await es entonces solo una característica de idioma presentada con C# 5, significa .NET 4.5, para dar soporte al TPL de una manera simplificada.

The BeginXXX/EndXXX belongs to the APM style! Por lo tanto, no tiene nada que ver con el TPL. Estas múltiples versiones dificultan la visión general.

Cuestiones relacionadas