Comment synchroniser les tâches?
Dire que j'ai une méthode asynchrone qui enregistre dans un fichier:
async Task SaveToFileAsync()
{
var file = await folder.GetFileAsync ( ...)
var stream = file.OpenFileAsync(...)
///etc
}
Maintenant, imaginez que SaveToFileAsync est appelé deux fois simultanément. C'est un problème parce que vous ne pouvez pas écrire sur le même fichier en même temps
Si c'est une méthode régulière, lock() permettrait de résoudre ce problème:
void SaveToFile()
{
lock(something)
{
///code here
}
}
Cependant, verrouillage n'est pas autorisé dans une méthode asynchrone.
Bien sûr, on pourrait appeler Moniteur.Enter() ou utiliser un mutex, mais ces objets travailler avec les fils, pas de tâches. Par conséquent, ils ne sont pas la réponse.
Depuis lock() n'est pas une option, comment pouvez synchroniser plusieurs tâches?
En particulier, quel code dois-je écrire pour s'assurer que "SaveToFileAsync" est appelée qu'une seule fois à un moment?
la seule chose qui vient à l'esprit est que vous souhaitez enregistrer dans 2 fichiers différents de manière asynchrone, mais souhaitez synchroniser l'accès au même fichier...
Vous pouvez utiliser une file d'attente à un autre processus de travail fonctionne.
Désactiver le
Save
bouton comme la première étape de la tâche et de le ré-activer la dernière étape.OriginalL'auteur user380719 | 2012-04-12
Vous devez vous connecter pour publier un commentaire.
Pour un async mécanisme d'exclusion mutuelle, avoir un regard sur
Bâtiment Async Primitives De Coordination, Partie 6: AsyncLock
Vous pouvez utiliser le
AsyncLock
classe suit:Le
Part 6
post ne donne pas de copier/coller le code. Un autre blogueur regroupées ici tho: sanjeev.dwivedi.net/?p=292OriginalL'auteur dtb