Async methods commonly store state data in their class object or in the state object that is passed as a parameter. It can be useful to be able to provide "out of band" data to the asynchronous routine and the callback routine beyond these mechanisms.
I have found that .NET provides a mechanism that "almost works" through the CallContext architecture. The data must be set through the LogicalSetData method. The problem is that such an object must be serializable, otherwise other things will break. For example, if you uncomment the lines in the Problem Statement example, it will fail.
Clearly, however, it is not really necessary for the object to support serialization to be useful with asynchronous routines in the manner illustrated by the example. This is a suggestion to provide a more suitable context specifically for use with asyncrounous routines that does not require the data value objects to be serializable.
(As a somewhat unrelated issue, LogicalSetData should probably fail right away if the object is not serializable, instead of waiting until an cross-AppDomain call finally happens.)