C # Programmation asynchrone: le risque de blocage de tâche.ATTAGE ET AWAIT
Dans la programmation asynchrone C #, la compréhension de la différence entre
et est très importante. Les deux sont utilisés pour synchroniser les opérations asynchrones, mais l'impact de la réalisation du comportement du thread est très différent. Task.Wait
await
Par exemple, si une méthode
pour attendre que plusieurs tâches se terminent, cette méthode d'obstruction synchrone peut conduire à des verrous morts. Parce que la méthode et la tâche asynchrone, il attend sur le même thread. Le fil ne peut pas continuer les tâches asynchrones après le blocage, provoquant des serrures mortes. GET
Task.WaitAll
au contraire, est un mécanisme d'attente asynchrone. Lors de la rencontre des expressions GET
, la méthode qui le contienne "s'arrêtera" et renverra une tâche inachevée à l'appelant. Cela permet à l'appelant de continuer l'exécution, tandis que les expressions
await
En bref, await
synchroniser le thread actuel, et il peut provoquer des serrures mortes lorsqu'ils sont utilisés avec des tâches asynchrones; Afin d'éviter les verrous morts dans la scène asynchrone, il est recommandé d'utiliser la stratégie "pleine asynchrone" et d'utiliser await
comme mécanisme préféré pour les opérations asynchrones synchrones. await
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!