我有一个网站,其中前端自动保存输入到后端的数据。这些保存可能非常接近,我想锁定每个用户的结果保存。
我不想使用简单的“锁定”,因为这会阻止所有试图保存的用户。
无论如何都要在.NET中执行此操作吗?
答案 0 :(得分:4)
每个用户拥有一个锁定对象听起来很合理。我还建议你使用Monitor.TryEnter而不是lock,如果已经有一个正在保存的话,就跳过保存。像这样:
static ConcurrentDictionary<string, object> _locksByUser = new ConcurrentDictionary<string, object>();
public void Save(string userId) {
var lock = _locksByUser.GetOrAdd(userId, new object());
if (Monitor.TryEnter(lock)) {
try {
//do save here
}
finally {
Monitor.Exit(lock);
}
}
}