anchor.diff:                  freeSpriteMessages messages
   
                   // loop until swap is requested
  -                while not swap && not terminated do
  -                    Thread.Yield () |> ignore<bool>
  +                SpinWait.SpinUntil (fun () -> swap || terminated)
   
                   // guard against early termination
                   if not terminated then
  
positive.code:         while not terminated do
  
              // loop until submission exists
              while Option.isNone submissionOpt && not terminated do
                  Thread.Yield () |> ignore<bool>
  
              // guard against early termination
              if not terminated then
  
negative.code:             task.Start ()
  
              // wait for task to finish starting
              SpinWait.SpinUntil (fun () -> started)
  
          member this.EnqueueMessage message =
              if Option.isNone taskOpt then raise (InvalidOperationException "Render process not yet started or already terminated.")
  