title: How to make multiple concurrent calls to async function collapse into 1 task?
body: <p>I have a C# <code>async</code> function like <code>SlowRewriteFolder()</code>, and I have multiple calls of this function coming in asynchronously.</p>
  <p>If a call to this function is already processing, I want subsequent callers to not kick off the work that this function does again and instead wait on the same result (especially while the first one is still in progress).</p>
  <p>How can I make it so that the <code>Task</code> created for the first call is shared among subsequent callers while it is still in progress?</p>
  <p>I have considered caching the <code>Task</code> instance and returning that if it is available and clearing it when the work is complete, but is that the best approach?</p>