 <p>You cannot schedule IO tasks because they do not have a thread associated with them. The Windows Kernel provides thread-less IO operations. Starting these IOs does not involve managed code and the <code>TaskScheduler</code> class does not come into play.</p> <p>So you have to delay starting the IO until you are sure you actually want the network to be hit. You could use <code>SemaphoreSlim.WaitAsync</code> to throttle the amount of tasks currently running. Await the result of that method before starting the individual IO and awaiting that as well.</p>