This is the most compelling example, IMO. I don’t see how the second proposed solution (await
on scopes) would solve this problem. Which means…
I think that this kind of solution is the only one that is really workable. When your principles don’t fit reality, sometimes you need to change your principles.
However, I do feel that, as written, it is probably over-generalising. Most developers won’t understand/remember what an “async
statement or declaration” is - does it mean calling or declaring an async
function? What about the async
global function? DispatchQueue.async
? Any of the other hundreds of APIs in 3rd-party libraries which have “async” somewhere in the name?
The word ‘async’ is used so broadly that it is probably unwise to attach this kind of specific meaning to it.