without understanding run method español ejemplo create await async asynchronous async-await c#-5.0

asynchronous - understanding - ¿Cómo espera sincronizar el trabajo en C#



task.run async c# (2)

La mayoría de sus preguntas se responden en la documentation official y también en una publicación introductoria que escribí.

Pregunta n. ° 4: ¿Cómo puedo usar la sincronización con las operaciones de DB? Es posible

Entity Framework 6 (actualmente en Beta) admite async . Las API de base de datos de nivel inferior admiten operaciones asincrónicas de una forma u otra. Algunos de ellos (por ejemplo, SQLite) admiten async directamente; otros necesitan que escribas envoltorios compatibles con async simples.

... y recomendado?

Sí, a menos que esté escribiendo un servidor de aplicaciones para el usuario (por ejemplo, ASP.NET) que se comunica con una máquina de base de datos única no escalable en el back-end. En ese caso específico, no tiene sentido hacer que su extremo frontal se escale porque su parte posterior no puede escalar para que coincida de todos modos.

Pregunta n. ° 5: ¿En qué escenario serán útiles las operaciones de sincronización, parece que cada API solo está haciendo operaciones asincrónicas ahora sin una razón? o me perdí el punto de usar operaciones asincrónicas?

Los beneficios de las operaciones asincrónicas son:

  1. En el lado del cliente (UI), su aplicación sigue siendo receptiva.
  2. En el lado del servidor, su aplicación se escala mejor.

Estoy tratando de entender cómo esperar el trabajo asincrónico en C # y una cosa me confunde mucho. Entiendo que cualquier método que use la palabra clave await debe estar marcado con async. Tengo entendido que cuando se golpea una línea con la palabra clave await, el código que se encuentra debajo de esa línea no se ejecuta. Se inicia una operación asíncrona para llevar a cabo la instrucción en la línea de espera y se devuelve el control al método de llamada que puede continuar con la ejecución.

Pregunta n. ° 1: ¿Es correcta esta suposición o aún se ejecuta el código debajo de la palabra clave await?

En segundo lugar, supongamos que llamé a un método de servicio asincrónico y necesito devolver su resultado. La declaración de devolución está debajo de la palabra clave await.

Pregunta n. ° 2: ¿Cuándo se activa la declaración de devolución después de que la llamada asincrónica haya finalizado o antes?

Pregunta n. ° 3: Deseo utilizar el resultado de esa llamada de servicio y la operación asincrónica no me ayudará, ya que quiero que el método de llamada se active cuando se devuelve el resultado. Entiendo que esto se puede hacer usando la propiedad Result que hace que la llamada sea synchronus. Pero entonces, ¿cuál es el uso de asincronización en las operaciones de BD porque son los que realmente toman el 80% del tiempo en la mayoría de las aplicaciones.

Pregunta n. ° 4: ¿Cómo puedo usar la sincronización con las operaciones de DB? ¿Es posible y recomendado?

Pregunta n. ° 5: ¿En qué escenario serán útiles las operaciones de sincronización, parece que cada API solo está haciendo operaciones asincrónicas ahora sin una razón? o me perdí el punto de usar operaciones asincrónicas?

Lo que quiero decir al decir que las API están haciendo métodos asyn sin una razón es porque los métodos tienen que devolver algo y hasta que se haga el cálculo, ¿cómo pueden regresar? Así, en esencia, la llamada no seguirá bloqueando en el sentido de que será inútil hasta resultado es devuelto?


MSDN lo explica todo .

Aunque entiendo que a veces los documentos de vanilla (especialmente de MSDN) pueden ser difíciles de aplicar a su situación particular, así que repasemos sus puntos.

Pregunta n. ° 1: ¿Es correcta esta suposición o aún se ejecuta el código debajo de la palabra clave await?

El código debajo de la palabra clave "esperar" solo se ejecutará cuando se complete la llamada asíncrona. Mientras tanto, como su método está marcado como "asíncrono", el control se devolverá a la persona que llama de su método hasta que se complete su método. Desde el enlace de MSDN arriba:

Task<string> getStringTask = client.GetStringAsync("http://msdn.microsoft.com"); // You can do work here that doesn''t rely on the string from GetStringAsync. DoIndependentWork(); // The await operator suspends AccessTheWebAsync. // - AccessTheWebAsync can''t continue until getStringTask is complete. // - Meanwhile, control returns to the caller of AccessTheWebAsync. // - Control resumes here when getStringTask is complete. // - The await operator then retrieves the string result from getStringTask. string urlContents = await getStringTask;

Creo que los comentarios son bastante explicativos.

En segundo lugar, supongamos que llamé a un método de servicio asincrónico y necesito devolver su resultado. La declaración de devolución está debajo de la palabra clave await.

Pregunta n. ° 2: ¿Cuándo se activa la declaración de devolución después de que la llamada asincrónica haya finalizado o antes?

Después.

Pregunta n. ° 3: Deseo utilizar el resultado de esa llamada de servicio y la operación asincrónica no me ayudará, ya que quiero que el método de llamada se active cuando se devuelve el resultado. Entiendo que esto se puede hacer usando la propiedad Result que hace que la llamada sea synchronus. Pero entonces, ¿cuál es el uso de asincronización en las operaciones de BD porque son los que realmente toman el 80% del tiempo en la mayoría de las aplicaciones.

Supongamos que necesita realizar tres consultas DB no relacionadas para completar su servicio, luego realice un cálculo basado en los resultados, luego termine. Si hicieras esto secuencialmente, tendrías que esperar hasta que cada operación se complete. Si usa llamadas asincrónicas, C # ejecutará las tres consultas en paralelo y su servicio podría finalizar mucho antes.

Además, las operaciones que devuelven tareas se pueden usar como futuros. Vea MSDN en futuros donde se discuten varios patrones sobre cómo paralelizar el trabajo basado en futuros y fusionar los resultados.

Si su servicio solo necesita una llamada a un DB, definitivamente será peor para usted llamarlo asincrónico.

Pregunta n. ° 4: ¿Cómo puedo usar la sincronización con las operaciones de DB? ¿Es posible y recomendado?

ADO.NET ahora incluye métodos asíncronos ReadAsync y NextResultAsync .

Definitivamente es posible, en cuanto a lo recomendado, esta discusión es mucho más completa de lo que podría escribir here .

Pregunta n. ° 5: ¿En qué escenario serán útiles las operaciones de sincronización, parece que cada API solo está haciendo operaciones asincrónicas ahora sin una razón? o me perdí el punto de usar operaciones asincrónicas?

las operaciones asincrónicas son muy útiles para paralelizar fácilmente cualquier operación de larga ejecución sin tener problemas de subprocesamiento. Si su método solo hace una cosa, o una secuencia de cosas simples (rápidas), entonces sí, es inútil ir asincrónico. Sin embargo, si tiene más de una operación de larga ejecución, es mucho más fácil y menos propenso a errores para paralelizarlas mediante asincronización que hacerlo con hilos de administración.