public void OnComplete()
 {
     lock (this)
     {
         if (Volatile.Read(ref cancelled))
         {
             return;
         }
         if (done)
         {
             return;
         }
         done = true;
         if (emitting)
         {
             return;
         }
     }
     actual.OnComplete();
 }