I wrote up a little flowchart here for how I think about "is it ok to do this work on the default Swift Concurrency thread pool?": https://forums.swift.org/t/is-concurrent-now-the-standard-tool-for-shifting-expensive-synchronous-work-off-the-main-actor/82976/17
When to make something asynchronous, when to make it parallel, and how parallel to make it are all inherently tricky in extremis, but the default behavior is the default for a reason, and is appropriate in the vast majority of cases.
