title: Condition check in async method
body: <p>Question description:
  <strong>I am surprised that code inside the if block is reached. I supposed the if block won't be executed.</strong></p>
  
  <p>I am totally confused. Who can explain or teach me? </p>
  
  <pre><code>private async Task TestMethod()
  {
      bool ok = false;
      City city = City.BJ;
      await Task.Delay(100);
      ok = true;
  
      if (!ok)//Suppose it won't go into this code block. Because variable 'ok' is true.
      {
          if (city == City.BJ)//City is enum type.
          {
              throw new Exception("BJ. Good day.");
          }
          else
          {
              throw new Exception("SH. Rainy day");//This row is reached.Weird! But the upper caller method doesn't detect this exception.
          }
      }
  }
  
  enum City
  {
      BJ = 1,
      SH = 2
  }
  </code></pre>