Как синхронизировать потоки в ASP.NET - PullRequest
0 голосов
/ 06 сентября 2011

У меня есть приложение ASP.NET с таким кодом, выполняющимся для веб-запроса:

ProcessAction(actionId)

Я хочу быть уверен, что ProcessAction не выполняется одновременно для одного и того же actionId, поэтому мне нужносделать что-то вроде этого:

WaitIfActionWithIdIsExecuting(actionId) 
ProcessAction(actionId)

Какой механизм синхронизации .NET я должен использовать?Mutex, Monitor, AutoResetEvent, ManualResetEvent?

Ситуация, когда потоку придется ждать, будет очень редкой.

Ответы [ 2 ]

2 голосов
/ 06 сентября 2011

Вы можете создать строку из идентификатора и интернировать ее, чтобы у вас всегда был одинаковый экземпляр строки для идентификатора, и заблокировать, используя строку в качестве идентификатора:

lock (String.Intern(actionId.ToString())) {
  ProcessAction(actionId);
}
1 голос
/ 06 сентября 2011

Вы можете использовать блокировки, но в веб-контексте я бы предпочел синхронизацию через базу данных. Создайте таблицу для действий со столбцом «status», который обозначает состояние действия (InProgress, Pending, Completed и т. Д.). Конечно, это зависит от конкретной задачи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...