title: Terminate or exit C# Async method with "return"
body: <p>I was new to the <code>async-await</code> method in <code>C# 5.0</code>, and I have few questions in my mind</p>
  
  <ol>
  <li><p>What is the best way to escape an <code>async</code> method if it failed an input argument or null check?</p></li>
  <li><p>What is the logical flow of using <code>return;</code> in an Task <code>async</code> method (In some circumstances, it became an infinite loop)?</p></li>
  <li><p>Is <code>CancellationToken</code> or <code>Task.Yield</code> fit better in this scenario?</p></li>
  </ol>
  
  <p></p>
  
  <pre><code>public Func&lt;AzureBlobInfo, string, Task&gt; UploadSuccessCallBackAsync { get; set; }
  
  private async Task OnUploadSuccessAsync(AzureBlobInfo info)
  {
      if (this.UploadSuccessCallBackAsync == null)
      {
          return;
      }
  
      var transactionType = this.FormData.Get("transactionType");
      if (string.IsNullOrEmpty(transactionType))
      {
          transactionType = "unknown";
      }
  
      await this.UploadSuccessCallBackAsync(info, transactionType);
  }
  </code></pre>