c# - 在每个线程中获取下一个值的正确方法是什么?
问题描述
我有一个多线程场景,我处理了 1000 个线程:
private ConcurrentDictionary<TableNames, int> _lastInsertedIds = new ConcurrentDictionary<TableNames, int>();
Parallel.For(0, 100, i => {
var id = ++_lastInsertedIds[TableNames.Scores];
});
无论执行顺序如何,如何确保 id 始终是下一个最高的?
我想避免使用手动锁定对象。
解决方案
您可以使用AddOrUpdate:
Parallel.For(0, 100, i => {
var id = _lastInsertedIds.AddOrUpdate(TableNames.Scores, 1, (key, existing) => existing + 1);
});
推荐阅读
- javascript - React 将 isLoggedIn useState 从 Login 组件传递给 app.js
- javascript - 显示数组获取项目变量
- azure - 如何在 Azure PaaS 上的 Tomcat 中扩展 ErrorReportValve?
- python - 如何使用 TfIdfVectorizer 查找重要单词?
- local-storage - 寻找外部服务
- amazon-web-services - 新证书是否意味着导入整个链
- css - 带有 CSS 的 SVG 动画。将包裹在类周围的 SVG 元素移动到特定的 X 和 Y 坐标
- javascript - 尝试设置 react-native 调谐器时未处理的承诺拒绝
- python - 如何创建一个接受 pandas 数据框并删除包含特定值的行的函数?
- python - Python Flask - 如何将用户重定向到他们刚刚发布的帖子?