How Do You Build a Mutex That Works with async/await ?

Actors let tasks slip through reentrancy and a Mutex can't be held across an await — so how do you guarantee an async method never runs twice at once? A line-by-line look at how Matt Massicotte's TaskGate pulls it off.