我正在尝试了解 C# 5 的新异步功能是如何工作的。假设我想开发一个原子增量函数来增加一个虚构的 IntStore 中的整数。仅在一个线程中对该函数进行多次调用。
async void IncrementKey(string key) {
int i = await IntStore.Get(key);
IntStore.Set(key, i+1);
}
在我看来,这个功能是有缺陷的。对 IncrementKey 的两次调用可以从 IntStore 返回相同的数字(例如 5),然后将其设置为 6,从而丢失其中一个增量?
如果 IntStore.Get 是异步的(返回任务)以便正常工作,如何重写?
性能至关重要,是否有避免锁定的解决方案?