visual usa sirven significado reservadas realizar que puede para palabras net name metodos lenguaje keywords importantes hacer finalizar etiquetas etiqueta ejemplos ejemplo como claves await async asincronos c# multithreading task-parallel-library async-await conceptual

c# - usa - que se puede realizar en visual basic



¿Las palabras clave async y esperar no hacen que se creen hilos adicionales? (1)

No corren en paralelo, se turnan. Cuando se bloquea el progreso de la Tarea en ejecución, almacena su estado y proporciona el control a una Tarea lista. Es una multitarea cooperativa, no un verdadero paralelismo.

Los hilos funcionan según el principio de la muestra. Sin embargo, hay varias diferencias clave que me gustaría destacar.

Primero, simplemente porque async / await no son hilos de sistema operativo:

  • Las tareas no verán diferentes ID de hilo
  • El almacenamiento local de subprocesos no se conmuta automáticamente al contexto cuando se produce una Tarea.

En segundo lugar, las diferencias de comportamiento:

  • async / await usa la multitarea cooperativa, los hilos de Win32 usan la prioridad. Por lo tanto, es necesario que todas las operaciones de bloqueo controlen explícitamente el uso del modelo async / await . Por lo tanto, puede terminar bloqueando un subproceso completo y todas sus tareas realizando una llamada de bloqueo a una función que no está escrita para rendir.
  • Las tareas no se ejecutarán en paralelo en un sistema de multiprocesamiento. Dado que la reinserción está controlada, esto hace que el mantenimiento de las estructuras de datos sea mucho más fácil.

Como Stephen señala en un comentario, puede obtener ejecución simultánea en varios subprocesos del sistema operativo (junto con toda la complejidad y las posibles condiciones de carrera) si utiliza un contexto de sincronización de multiproceso. Pero las citas de MSDN fueron sobre el caso de contexto de un solo hilo.

Finalmente, en otros lugares donde se usa este mismo paradigma de diseño, puede aprender mucho sobre buenas prácticas para async / await al estudiar estos:

  • Fibras Win32 (usa el mismo estilo de llamada que los hilos, pero cooperativo)
  • Win32 operaciones de E / S superpuestas , Linux aio
  • Coroutines

Estoy confundido. ¿Cómo se puede ejecutar una o varias Task en paralelo en un solo hilo? Mi comprensión del paralelismo es obviamente errónea.

Bits de MSDN no puedo envolver mi cabeza alrededor:

Las palabras clave async y espera no hacen que se creen subprocesos adicionales. Los métodos asíncronos no requieren subprocesos múltiples porque un método asíncrono no se ejecuta en su propio hilo. El método se ejecuta en el contexto de sincronización actual y usa el tiempo en el hilo solo cuando el método está activo.

.. y:

Entre iniciar una tarea y esperarla, puede iniciar otras tareas. Las tareas adicionales se ejecutan implícitamente en paralelo, pero no se crean subprocesos adicionales.