So I've done some some digging and it looks like the results from Activities are stored in table storage if the json is < 64 Kb, otherwise it is stored as a blob.
If you look in the History table of your durable function, you can see for the rows where the EventType
column is TaskCompleted
which indicates the completion of an Activity that was triggered by your orchestrator, you can see another column Result
which is either the json result or the path of a blob where the result of your Activity is stored.
So in theory, the size limit for an Activity result is the size limit of a blob (approx 4.75TiB). Although, there may be some other limiting factors before you even reach that point i.e. memory.
I'd also add that the instance of orchestrator/activity functions need to read the results from storage. This might take a performance hit, especially if there is a lot of activities being called, and a lot of data is being returned.
ref: https://learn.microsoft.com/en-us/azure/storage/common/storage-scalability-targets#azure-blob-storage-scale-targets