Это базовый параллелизм, и, как всегда, вам нужно иметь особую стратегию обработки параллелизма. Используемый в настоящее время метод недостаточен, если вы не зададите логику, так что только один запрос может проходить через конвейер одновременно с использованием семафора. Это обходит проблему параллелизма, но, очевидно, влияет на производительность, так как вы создаете в своем приложении точку подавления.
Лучшая ставка здесь, поскольку у вас есть уникальное ограничение, заключается в переносе кодав попытке / поймать и фактически обработать сценарий, с которым вы столкнулись. Поскольку для каждого IMEI должна быть только одна запись, вы можете просто сделать то же самое, что и в блоке else для блока catch: вернуть ConflictException
.
Для этой конкретной проблемы естьникаких других опций, кроме добавления блокировки или обработки исключения (используя try / catch). Неважно, насколько «быстро» вы идете, всегда есть вероятность потенциального конфликта параллелизма, и вам придется справиться с этим.