It should be worth noting here that the # of concurrent Tasks does not necessarily correspond with the # of threads. The global executor is responsible for assigning (non @MainActor) tasks to available threads. The number of threads is hardware dependent, but the number of concurrent tasks is functionally only limited by memory.
Here's a great talk from Donny Wals that explains some of the nuance here: