Introduction
In the previous chapter, we looked at serverless scaling patterns and learned how to make serverless applications scale to millions of users. A large part of this revolves around shifting workloads to asynchronous methods. This is a great thing to do, but can lead to quite complex state management for long-running asynchronous methods.
Normal Azure Functions are fleeting, temporary compute environments. This is very useful when combined with their scaling capability, but sometimes you do need a longer-running workflow. This generally involves lots of work and non-business-logic code, particularly around handling transient or systematic failures and availability. Hence, this was previously not really possible in a serverless environment, and was generally only achievable on a Logic App, Azure App Service, or the Azure Data Factory. In the case of a Logic App, the workflow is defined in JSON or in a designer view that is very difficult to scale to a lot of complexity and is also...