await y
task.wait en programación asíncrona: trampa Deadlock
]
En la programación asíncrona, es crucial comprender la diferencia entre a espera
y task.wait
. Este artículo analizará un caso en el que el punto muerto es causado por el uso de task.waitall
.
tarea
task.wait
task.waitall espera las 10 tareas devueltas por el método
ros () para completar. Esto bloquea el hilo, evitando que realice operaciones posteriores.
: asynchronous espera
]
permite que el método devuelva tareas inacabadas a la persona que llama mientras espera que la tarea complete de manera asincrónica. Cuando se completa la tarea, el código restante en el método está programado para operaciones posteriores.
] En el método de muestra, el método
get bloquea el hilo llamando task.waitall
, y el método ros
llamando a los métodos asíncronos foo
bar ] para crear una serie de operaciones asíncronas. Esto evita efectivamente que la tarea complete y libere el hilo. Como resultado, el método
get nunca saldrá, lo que resulta en un punto muerto.
Operación de bloqueo en código asíncrono
]] El uso de operaciones de bloqueo en código asíncrono generalmente no se recomienda. Cuando se produce el bloqueo, el hilo no puede procesar las solicitudes entrantes, lo que resulta en la degradación del rendimiento y los posibles puntos muertos.
en conclusión
Comprender la diferencia entre espera
y task.wait es crucial para evitar los puntos de punto y aprovechar de manera efectiva la programación asíncrona.
task.wait debe usarse solo en escenarios específicos donde se requiere un bloqueo sincrónico. En la mayoría de los casos, se recomienda utilizar un enfoque "totalmente asincrónico", usando
espera a lo largo de su código para mantener la asincrónica y evitar problemas de bloqueo.
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3