Мы изучаем создание системы, которая имеет область кода, требующую взаимного исключения. В выделенном хостинге среды на одном сервере, мы могли бы использовать этот простой код, который будет работать на нескольких потоках:Azure web job - Внедрение взаимного исключения в облаке
SomeAsyncOperation();
lock(locker)
{
SomeSyncOperation1();
SomeSyncOperation2();
}
Будет ли эта работа в облаке (в предположении, что webjobs может работать на нескольких физических машинах)? В частности, Azure. Если не так, как это будет реализовано? До сих пор я смотрел CloudBlockBlob и competing consumer pattern. Что люди делают для достижения этого?
Заранее спасибо.
Edit: подробнее
Operation1 выполняет поиск по таблице, то работы2 добавляет запись как очереди и таблицы, если Operation1 ничего не находит (в противном случае исключение). Чтобы предотвратить добавление повторяющихся элементов в очередь, важно, чтобы Operation1 и Operation2 выполнялись атомарно во всех потоках (приложение работает с использованием async/await).
Следующий сценарий является примером того, как состояние гонки может возникнуть:
T1 T2
O1()
O1()
O2()
O2()
На нити T1 operation1 не найден дубликат. Поток T2 появляется и добавляет дубликат. Затем Threat T1 запускает операцию2, которую она не должна была делать.
Обычно это можно предотвратить с помощью блокировки(), но я не верю, что это будет работать на физических машинах (например, в облаке). Если я не ошибаюсь в этом вопросе ...
являются веб-камерами, запускаемыми или непрерывными? –
Он будет работать ежедневно, но мы также хотели бы запустить его вручную. Это изменяет поведение? – garryp
Что такое природа заблокированного ресурса, который может быть использован только одним экземпляром процесса? Я спрашиваю, потому что Webjobs могут обрабатывать многопоточность, но вы также можете [установить их в один поток] (https://azure.microsoft.com/en-us/documentation/articles/websites-dotnet-webjobs-sdk -storage-queues-how-to /), и если вы не расширяете приложение App, у вас есть однопоточный уникальный Webjob. Мы используем Queues для этого сценария, при этом несколько Webjobs потребляют сообщения, но только одна функция может читать одно сообщение в данный момент времени, например, конкурирующий шаблон потребителя. –