Maison >développement back-end >C++ >Pourquoi ne pouvez-vous pas utiliser « wait » dans une instruction « lock » en C# ?
La raison pour laquelle l'utilisation de lock
est interdite dans l'instruction await
en C#
En C#, l'opérateur await
ne peut pas être utilisé dans une instruction lock
, ce qui est un choix de conception délibéré fait par l'équipe du compilateur. Bien que la mise en œuvre de cette fonctionnalité ne soit pas difficile, elle est considérée comme une pratique dangereuse pouvant conduire à des blocages.
La raison de la restriction
Autoriser l'utilisation de lock
dans une instruction await
entraîne l'exécution de code arbitraire entre le moment où await
libère le contrôle et la reprise ultérieure de la méthode. Ce code peut acquérir des verrous dans un ordre qui entre en conflit avec la hiérarchie de verrouillage d'origine, provoquant un blocage.
De plus, await
l'exécution peut reprendre sur un thread différent de celui qui a initialement acquis le verrou. Cela conduit à la possibilité de déverrouiller le verrou sur un thread différent de celui qui a acquis le verrou, ce qui est hautement indésirable.
Impact sur la mise en œuvre du verrouillage personnalisé
Les tentatives visant à contourner cette limitation à l'aide d'une implémentation de verrouillage personnalisée (telle que celle fournie dans l'exemple de code donné) peuvent entraîner un comportement imprévisible et potentiellement sujet aux blocages. En effet, l'appel await
dans la classe ExitDisposable
peut se bloquer indéfiniment si un autre thread acquiert le verrou pendant que l'opération Monitor.Exit
est en cours.
Conclusion
Bien que l'opérateur await
offre de puissantes capacités de programmation asynchrone, il est important de comprendre l'importance de suivre les meilleures pratiques recommandées, notamment l'interdiction de l'utilisation de lock
dans une instruction await
. Cette restriction vise à éviter les blocages et à garantir la sécurité et la fiabilité du code multithread.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!