Start here. This is the direct spoken answer to practice first.
Overview
Tests asynchronous coordination through observable events and proves spawned tasks finish or cancel cleanly.
I test async coordination with events, queues, or futures that expose when the code reached a state, not with guessed sleeps. Every task the test creates is awaited, or it is cancelled and then awaited so cleanup runs. For cancellation, I arrange the task at a known suspension point, cancel it, and assert the public outcome and released resources. A timeout bounds a broken test but is not the synchronization mechanism.