Hold exclusion until every sibling task settles
When a lock protects a batch of concurrent sibling tasks, do not release it on the first rejection. A fail-fast aggregate can reject while other siblings keep running, allowing the next invocation to overlap unfinished work. Capture the promises, await all settlement while the lo…