title: Is it OK to declare an async method as returning void to silence the CS4014 warning?
body: <p>Visual Studio emits a warning for this code ('because this call is not awaited, execution of the current method continues before the call is completed').</p>
  
  <pre><code>static void Main(string[] args)
  {
      FireAndForget(); // &lt;-- Warning CS4014
      // Do something else.
  }
  
  static async Task FireAndForget()
  {
      // Do something (cannot throw).
  }
  </code></pre>
  
  <p>My understanding is that it is OK not to wait for the task in this particular case because FireAndForget will never throw an exception.</p>
  
  <p>Instead of disabling the warning with a pragma, I was considering changing the return type of FireAndForget from Task to void. That effectively silences the compiler.</p>
  
  <pre><code>static async void FireAndForget() // &lt;-- Task changed to void
  {
      // Do something (cannot throw).
  }
  </code></pre>
  
  <p>However, according to <a href="https://msdn.microsoft.com/en-us/magazine/jj991977.aspx" rel="noreferrer">Stephen Cleary</a>, 'async void' methods should be avoided so I am not quite sure what to do.</p>
  
  <p>Is it OK to have a 'async void' method if the method is not designed to be awaitable in the first place and if no exception will be thrown?</p>