asp.net mvc - условие гонки: заблокировать метод с теми же параметрами - PullRequest
0 голосов
/ 11 августа 2011

Я занимаюсь разработкой веб-приложения asp.net mvc 3.В моем приложении у меня есть клиент JavaScript, отправляющий вызовы на мой сервер.Один из вызовов направлен на мой метод, который в свою очередь:

  • Создает новый экземпляр объекта -
  • Сохраняет его в базе данных
  • Вызывает удаленный веб-сервер.

Я решаю, выходить ли из функции, запрашивая мою базу данных, чтобы узнать, действительно ли существует объект (если да, я выхожу).

Моя проблемав том случае, если два вызова выполняются только один за другим, у объекта не было возможности сохранить его в базе данных, и поэтому оба потока будут думать, что им нужно продолжить.

Что бы яНапример, заблокировать метод только для потоков, которые вызываются с одинаковыми параметрами.Использование блокировки всего метода или даже его частей недопустимо, так как это приведет к серьезным проблемам с производительностью.

Как это можно сделать?

1 Ответ

2 голосов
/ 12 августа 2011

Используйте транзакции базы данных с сериализуемым уровнем изоляции для этого сценария.Это должно обеспечить последовательность операций чтения и вставки.

...