2012-03-20 4 views
8

Estoy tratando de entender mi programación asincrónica en C# 5 y la pregunta que me sigo preguntando es por qué No lo use todo el tiempo (para ASP.NET MVC 4 o Web API), como lo hacen los chicos de node.js?Cuándo y por qué no utilizaría la programación asincrónica de la base de tareas en C# 5.0 ASP.NET MVC 4 o API web

¿Hay alguna desventaja (sobrecarga innecesaria) que no sea el código no tan sencillo (que en mi humilde opinión es una broma ya que la nueva sintaxis es genial y fácil de entender)?

Respuesta

8

En su mayor parte, úselo en todas partes. Es por eso que convirtieron todo lo que lleva más de 50 ms en una llamada asíncrona :).

Sin embargo, tendrá los mismos inconvenientes que cualquier código asíncrono. La depuración podría ser más complicada. Si comienza a hacer una cosa y luego regresa a una tarea larga en el hilo de la interfaz de usuario, podría provocar una congelación falsa (el usuario podía moverse después de hacer clic, pero luego no puede hacer nada en la medida en que lo ve). Etc

Si lo ejecuta a través del código que espera valores, entonces actuará como código sincrónico de todos modos. Y, si golpea la memoria caché o alguna acción rápida, no se ejecutará de manera asincrónica por eficiencia. Por lo tanto, este último punto significa que, aunque exista una sobrecarga para realizar la magia del compilador en estas llamadas, esa magia no se realizará si la llamada ya se ha completado y, por lo tanto, no vale la pena.

Así que, sí, yo diría que lo utilizan en casi todas partes :) Es un gran paso para .NET

ACTUALIZACIÓN

If this article is to believed entonces sólo justifica lo que estoy diciendo. Si la llamada tarda menos de 50 ms, entonces no es ni debe ser asincrónico debido a la sobrecarga para escribirlo de esa manera. Y, de hecho, la mayoría de las veces activará la acción síncrona en lugar de la asincrónica. Sin embargo, si es más de 50 ms, solo obtendrá ganancia de la llamada asincrónica

+0

¡Gracias! Eso es lo que pensé, pero quería confirmar mis creencias. – W3Max

0

Depende de la CPU o la operación IO encuadernada que desee realizar en el servidor. Éstos son few excerpt from MSDN

En general, utilice tuberías asíncronas cuando las condiciones siguientes son verdaderas :

Las operaciones son red de ruedas o I/O obligados, en lugar de la CPU de ruedas.

Las pruebas muestran que las operaciones de bloqueo son un cuello de botella en el rendimiento del sitio y que IIS puede atender más solicitudes utilizando los métodos de acción asíncrona para estas llamadas de bloqueo.

Paralelismo es más importante que la simplicidad del código.

Desea proporcionar un mecanismo que permita a los usuarios cancelar una solicitud de larga duración .

Cuestiones relacionadas