title: async behaviour in Fsharp
body: <p>When running the following code</p>
  
  <pre><code>open System
  open Microsoft.FSharp.Control
  
  type Message(id, contents) =
      static let mutable count = 0
      member this.ID = id
      member this.Contents = contents
      static member CreateMessage(contents) =
          count &lt;- count + 1
          Message(count, contents)
  
  let mailbox = new MailboxProcessor&lt;Message&gt;(fun inbox -&gt;
      let rec loop count =
          async { printfn "Message count = %d. Waiting for next message." count
                  let! msg = inbox.Receive()
                  printfn "Message received. ID: %d Contents: %s" msg.ID msg.Contents
                  return! loop( count + 1) }
      loop 0)
  
  mailbox.Start()
  
  mailbox.Post(Message.CreateMessage("ABC"))
  mailbox.Post(Message.CreateMessage("XYZ"))
  
  //System.Threading.Thread.Sleep(500)
  Console.WriteLine("Press any key...")
  Console.ReadLine() |&gt; ignore
  </code></pre>
  
  <p>I get the following result</p>
  
  <pre><code>&gt; Press any key...
  Message count = 0. Waiting for next message.
  Message received. ID: 1 Contents: ABC
  Message count = 1. Waiting for next message.
  Message received. ID: 2 Contents: XYZ
  Message count = 2. Waiting for next message.
  </code></pre>
  
  <p>I would expect the msg press anykey to come somewhat after the first message...</p>
  
  <p>And if I include the sleep, it indeed comes after.</p>
  
  <p>So my question is :</p>
  
  <p><strong>Is the take away lesson</strong> of this that you can not expect any particular ordering when using async methods. aka, the <strong>code inside async can start with no specific precedence</strong> ?</p>