これってどういう意味があるの?単純にフラグを叩けばいいだけだろ。大して利点があるようには思えんが?
ManualResetEventの代わりにflg=Flseで初期化しておいて、setのところでflg=trueにして、
while(!flg);で待機したらいいだけではないのか?

var waitHandle = new ManualResetEvent(false);
Task.Run(() => {Thread.Sleep(2000);  waitHandle.Set(); });
 Console.WriteLine("Wait");
waitHandle.WaitOne(Timeout.Infinite);