You can't use the TPL with TestScheduler. Task.Delay will wait 500 real milliseconds, not simulated ones. You need to use an Rx-compatible version of Delay, something like Observable.Timer
.
On an unrelated note, don't use async methods in the Subscribe
, write something like this instead:
Observable.Return(true)
.Delay(TimeSpan.FromMilliseconds(100), scheduler)
.SelectMany(async _ => await Task.Delay(500))
.Subscribe(
{
value2Set = true;
});