My question is why is it null in DoWaitAsync? As for what I have learnt about thread local storage area and context flowing at the time of thread switching, I expect context to flow and all thread local storage data to be copied at the time
of context switching.

Is this because async/await turns off context flow (I know that context flow can be turned off) to boost performance?

Thanks Henrik. But I think I have not made myself clear. The point is not to create a delay that was just to display an async work is being done.

My point is why context is null inside the async work. As you also said, we have a context switching at the StartNew, so I expect the context to flow to the async work. This example displays what I mean using StartNew:

The issue with StartNew is that it does not by default flow the context -- you have to set it explicitly, The await keyword is special in that it flows it automatically. My example was not to show delay in particular but rather to show using await instead
of StartNew. If using the latter you have to specify the synchronization context explicitly, from [1]: