Я работаю над одним проектом на основе функций Azure, и у меня есть один статический вспомогательный класс с буфером (частный статический ConcurrentDictionary), который содержит некоторый список элементов, подлежащих обработке в конце выполнения, вопрос в том, будет ли этот буфер общим между несколькими запущенными экземплярами?
Делятся ли функции Azure контекстом между запущенными экземплярами?
Ответы (2)
Это зависит.
Чаще всего в одном и том же экземпляре будет выполняться несколько функций. это означает тот же процесс .NET и домен приложения, поэтому они будут совместно использовать ваш статический словарь.
Если ваше приложение-функция получает слишком много запросов для обработки в одном экземпляре, будет создан второй экземпляр, который не будет делиться ничем с первым экземпляром. Итак, в этом сценарии у вас будет 2 (и 3, 4, N, если нужно) словарей.
Любой из этих экземпляров также может исчезнуть в любой момент времени, поэтому вы не можете надежно хранить что-либо в словаре между выполнениями. Вы можете сделать это с «максимальными усилиями», например. для кэширования данных.
Функции Azure не обязательно выполняются на одном и том же компьютере каждый раз, когда они вызываются, а это означает, что общая память будет изменчивой, поскольку в будущем вызов может произойти на совершенно новом компьютере.
В идеале проектируйте вещи так, чтобы они не сохраняли состояние, и используйте технологию, более подходящую для постановки задач в очередь на потом, например очередь Azure.
Если вам необходимо сохранить некоторое состояние, поместите его в более постоянное место, например в каталог %HOME%
или в хранилище.