Different approaches to solving common async flow control problems