Это не прямой ответ на проблему, с которой вы столкнулись, но я расскажу, как мы решили аналогичную проблему в одном из наших приложений, где нам приходилось записывать данные в отдельные таблицы в Azure Table Storage. Поскольку мы записывали данные в отдельные таблицы, мы не могли использовать функциональность Entity Batch Transaction, доступную в Azure Table Storage.
Мы решили эту проблему, реализовав что-то похожее на eventual consistency pattern
.
Что мы делаем, так это вместо того, чтобы сохранять данные непосредственно в таблицах (что означало бы выполнение нескольких сетевых запросов, любой из которых может завершиться ошибкой), мы отправляем данные, которые необходимо сохранить, в очередь (мы использовали очередь хранения) . Если мы сможем сохранить данные в очереди, это означает, что данные в конечном итоге будут доступны.
Затем мы написали функцию Azure Queue Triggered Function. В этой функции мы сохраняем данные в таблицах, которые нам нужно сохранить. После успешного выполнения всех операций сообщение автоматически удаляется средой выполнения функции. В случае сбоя какой-либо операции сообщение будет снова отправлено в очередь и снова будет удалено из очереди.
Теперь важно понять, что эти методы сохранения должны быть идемпотентными. Допустим, мы записываем в 3 таблицы и операция записи для 1-й таблицы завершается успешно, но операция записи для 2-й таблицы завершается неудачно. В следующий раз, когда функция будет вызвана, она снова попытается выполнить запись в 1-ю таблицу, и код должен уметь правильно с этим справиться.