Future<void> call(Future<void> Function() f) async { await l.synchronized(() async { if (done) { return; } await f(); done = true; }); }