J'essaie de comprendre comment fonctionne la nouvelle fonction asynchrone de C# 5. Supposons que je veuille développer une fonction d'incrément atomique pour incrémenter un entier dans un IntStore fictif. Des appels multiples sont faits à cette fonction dans un fil seulement.Comment fonctionne l'async C# 5.0?
async void IncrementKey(string key) {
int i = await IntStore.Get(key);
IntStore.Set(key, i+1);
}
Il me semble que cette fonction est erronée. Deux appels à IncrementKey pourraient récupérer le même nombre de IntStore (disons 5), puis le mettre à 6, perdant ainsi l'un des incréments?
Comment cela peut-il être réécrit, si IntStore.Get est asynchrone (retourne Task) pour fonctionner correctement?
La performance est critique, existe-t-il une solution qui évite le verrouillage?