test with interleavings to find race conditions
fix race condition where all methods have called back before the final callback was added
use interleavings
handle case where one of the calls errors before the final callback is given