use synchronous completers to avoid retaining future results