То, что вы делаете, нормально, но не безопасно для потоков.thepirat000 упомянул в комментарии, что вы можете использовать оператор блокировки.
private static object acctNumLock = new object();
…
lock(acctnumLock) {
_accountNumber = ++_nextAccountNumber;
}
Вам также следует рассмотреть возможность использования более эффективного метода Interlock.Increment .Оператор блокировки позволяет вам «блокировать» (разрешать доступ только один поток за раз) к блоку операторов.Interlock.Increment - это атомарная операция, которая выполняет только одну вещь (а именно увеличивает значение), но делает это таким образом, чтобы гарантировать, что операция завершена до переключения потока.Оба обеспечивают безопасность потоков.
Есть ли лучший способ?Это очень сложный вопрос, потому что это зависит от того, что вы пытаетесь сделать.Я подозреваю, что реальные банковские приложения снимают блокировки БД и используют специальные алгоритмы для генерации номеров счетов (т.е. гораздо более сложный процесс).Если вы просто пытаетесь генерировать уникальные значения для простых приложений, то у вас должно получиться нормально.