TaskClass.prototype.perform(): this
Starts the run now without suspending the caller (ember-concurrency's verb), so work
can overlap: task.perform() early, await task later joins the in-flight run. Idempotent
— on a running or settled Task it is a no-op join. Returns this for chaining.
An unconsumed performed Task that fails becomes an unhandled rejection, exactly like any
un-awaited promise — perform-and-forget still wants a .result() or a recover somewhere.
const scanChanges = (root: string, ref: string) => Task(() => new Set([root, ref])); const buildFsTree = async (config: object): Promise<object> => config; const scan = scanChanges('.', 'HEAD').perform(); // git starts NOW const tree = await buildFsTree({}); // overlapped work const changes = await scan; // join the in-flight run — no second git call