Is it okay to attach async event handler to System.Timers.Timer? <p>I have already read SO post <a href="http://stackoverflow.com/questions/36661338/how-to-call-an-async-method-from-within-elapsedeventhandler">here</a> and article <a href="http://theburningmonk.com/2012/10/c-beware-of-async-void-in-your-code/" rel="nofollow">here</a> I have a timer event that fires every once in a while and i want to do some asynchronous processing inside the handler, so something along the lines of:</p> <pre><code> Timer timer = new Timer(); timer.Interval = 1000; timer.Elapsed += timer_Elapsed; // Please ignore this line. But some answers already given based on this line so I will leave it as it is. timer.Elapsed += async (sender, arguments) =&gt; await timer_Elapsed(sender, arguments); private async Task timer_Elapsed(object sender, ElapsedEventArgs e) { await Task.Delay(10); } </code></pre> <p>The code above compiling and working. </p> <p>But I am not sure why the code is compiling. The <code>ElapsedEventHandler</code> expected signature is </p> <pre><code> void timer_Elapsed(object sender, ElapsedEventArgs e) </code></pre> <p>However my method returns <code>Task</code> instead of <code>void</code> since <code>async void</code> is not recommended. but that does not match with <code>ElapsedEventHandler</code> signature and its still compiling &amp; working?</p> <p>Is it okay to call asyn method on Timer.Elapsed? the code will be executed inside windows service.</p> <p><strong>Update 1</strong> </p> <blockquote> <p>async void is "not recommended", with one very important exception: event handlers.</p> </blockquote> <p>Does it matter if its asynchronous event handler or synchronous event hander? </p> <p>MSDN Article <a href="http://%60https://msdn.microsoft.com/en-us/magazine/jj991977.aspx%60" rel="nofollow">here</a>csays </p> <blockquote> <p>Void-returning async methods have a specific purpose: to make asynchronous event handlers possible.</p> </blockquote> <p>Timer.Elapsed is I think synchronous event handler can I still attach <code>async void</code> to it?</p>