8

Encontré Difference between […]Async and Begin[…] .net asynchronous APIs pregunta pero this answer me confundió un poco.APM, EAP y TPL en la Programación de Socket

Hablando de estos patrones, Stephen dijo:

mayoría * métodos asincrónicos (con eventos * completadas correspondiente) están usando el modelo asincrónico basado en eventos. El más antiguo (pero aún perfectamente válido) Begin * y End * es un patrón llamado Modelo de Programación Asíncrona.

La clase Socket es una excepción a esta regla; sus * métodos Async no tienen ningún evento correspondiente; es esencialmente solo APM hecho de una manera para evitar asignaciones de memoria excesivas.

Lo entiendo como usar * Los métodos de Async son más eficientes, al menos cuando se trata de enchufes. Pero luego mencionado tareas de la Biblioteca paralelo:

Sin embargo, tanto APM y EBAP están siendo reemplazados con un enfoque mucho más flexible basado en la biblioteca de tareas en paralelo. Como el TPL puede ajustar APM fácilmente, es probable que las clases antiguas no se actualicen directamente; los métodos de extensión se usan para proporcionar equivalentes de Tarea para los viejos métodos de APM.

He encontrado TPL and Traditional .NET Asynchronous Programming en MSDN, sé lo básico de TPL, la creación de tareas, cancelaciones, continuaciones, etc, pero todavía no entiendo estas:

¿Cuáles son las ventajas de asincrónica modelo de programación (APM) y el patrón asíncrono basado en eventos (EAP) en comparación entre sí? ¿Cómo puede TPL envolver APM fácilmente? significa que tanto APM como EAP están reemplazados por con TPL?

Y lo más importante: ¿Qué debo usar en la programación de socket?

  • APM?
  • EAP?
  • APM o EAP envueltos en una tarea?
  • TPL utilizando los métodos de bloqueo de la clase Socket en las tareas?
  • ¿Otro?
+0

ver: http://stackoverflow.com/questions/5834755/turning-async-socket-parallel-and-not-only-concurrent- en-muy-intensivo-applicat –

Respuesta

6

¿Cómo TPL puede envolver fácilmente medidas de protección correspondientes significan que tanto APM y EAP están siendo reemplazados por TPL?

No lo es. Ya que APM y EAP serán reemplazados por TAP (Patrón Asíncrono de Tarea) o no en nuevas API, no tiene nada que ver con esto. Esperaría que TAP reemplazara APM y EAP por una variedad de razones. La razón principal para mí es que el código que se escribe para usar el TAP es mucho mejor. Hacer .ContinueWith(/* ... */).ContinueWith(/* ... */) generalmente lee mucho mejor que el código correspondiente que necesitaría escribir en llamadas asincrónicas de cadena a través de métodos Begin/End, incluso si no tiene en cuenta las opciones que puede pasar a ContinueWith para determinar si debe ejecutarse la continuación. El TPL también proporciona varios combinadores para tareas, como WaitAll y WaitAny, que pueden facilitar algunos escenarios. El soporte de idioma que viene en C# y VB.NET a través de las palabras clave async/await lo hará aún más fácil.

Ser capaz de ajustar los APM en el TAP hace que sea más fácil cambiar a este patrón, ya que significa que no tiene que volver a escribir el código existente para que quepa en el nuevo modelo.

¿Qué debería usar en la programación de socket?

Recomendaría usar el TAP envolviendo los métodos APM en Socket. A menos que pueda probar que la sobrecarga adicional de ajustar los métodos Begin/End en una tarea es la diferencia entre escalable/lo suficientemente rápido o no, aprovecharía la facilidad de codificación del TAP.

3

Gedeón tuvo una gran respuesta; Solo quería brindar más información:

¿Cuáles son las ventajas del Modelo de programación asíncrono (APM) y del Patrón asíncrono basado en eventos (EAP) en comparación entre sí?

APM es más común y tiene un patrón bastante estrictamente definido. por ejemplo, el TPL tiene envoltorios genéricos para métodos APM (TaskFactory.FromAsync), pero no puede hacer lo mismo para EAP porque EAP no está tan estrictamente definido.

EAP tiene una gran ventaja: las devoluciones de llamada de eventos manejan cálculo de referencias hilo para usted. Por lo tanto, son realmente útiles, por ejemplo, para operaciones de fondo básicas para una IU (BackgroundWorker).

TAP combina lo mejor de ambos mundos: el cálculo de referencias automático del hilo por defecto y un patrón común definida estrictamente. También tiene una buena representación de objeto para una operación asincrónica (Task).

¿Cómo "TPL puede ajustar APMs fácilmente" significa que "tanto APM como EAP están siendo reemplazados por TPL"?

No lo es.

"Sin embargo, tanto APM y EBAP están siendo reemplazados con un enfoque mucho más flexible basado en la Biblioteca paralelo de tareas". - lo que significa que el nuevo código no necesita incluir métodos/eventos APM/EAP; el nuevo código debe incluir métodos TAP en su lugar.

"Dado que el TPL puede envolver fácilmente medidas de protección correspondientes, las clases más antiguas probablemente no será informado directamente; métodos de extensión se utilizan para proporcionar equivalentes tarea para los antiguos métodos de APM." - lo que significa que puede agregar métodos TAP a un tipo de APM existente usando TaskFactory.FromAsync; Pensé que el equipo de TPL tomaría este enfoque en lugar de modificar una tonelada de clases en el BCL. Sin embargo, estaba equivocado en esta conjetura. Por motivos de rendimiento, el equipo BCL/TPL revisó todo el marco y agregó métodos TAP directamente a las clases .NET en lugar de usar métodos de extensión. Los nuevos métodos TAP se incluyen en .NET 4.5, próximamente ...

+1

TAP no hace thread calcular por sí mismo. Pero TAP en la combinación con 'await' hace. – svick

+1

Creo que esto depende de la definición de "TAP". Incluyo 'async' y' await' en TAP. –

Cuestiones relacionadas