Как правильно получить следующее значение в каждом потоке? - PullRequest
1 голос
/ 03 мая 2019

У меня многопоточный сценарий, я создаю 1000 потоков:

private ConcurrentDictionary<TableNames, int> _lastInsertedIds = new ConcurrentDictionary<TableNames, int>();

Parallel.For(0, 100, i => {
  var id = ++_lastInsertedIds[TableNames.Scores];
});

Как я могу обеспечить, чтобы идентификатор всегда был следующим по величине независимо от порядка выполнения?

Я бы не хотел использовать объект ручной блокировки.

1 Ответ

3 голосов
/ 03 мая 2019

Вы можете использовать AddOrUpdate :

Parallel.For(0, 100, i => {
  var id = _lastInsertedIds.AddOrUpdate(TableNames.Scores, 1, (key, existing) => existing + 1);
});
...