I think it can be modified to support wait multiple times. I just want to make it simple here, it is an one shot observer. 

Currently it will start to observe the complete notification when created. If the user calls observer.WaitForComplete() to wait, it will check whether it's waiting or has already got the notification, if true it will return immediately.