I have already read the SO posts here and article here. I have a timer event that fires every once in a while and I want to do some asynchronous processing inside the handle
You are correct about avoiding "async void". Not sure about the compiler not objecting but you are subscribing to the same event twice.
You should keep the asynchronous part inside the handler, not in the calling of the handler.
Try removing the duplicate event subscription:
timer.Elapsed += async (sender, arguments) => await timer_Elapsed(sender, arguments);
and change the handler's signature from:
private async Task timer_Elapsed(object sender, ElapsedEventArgs e)
to:
private void timer_Elapsed(object sender, ElapsedEventArgs e)
Then do the asynchronous part inside the handler, using something like the suggestion in this post: https://stackoverflow.com/a/31469699/6776481
Except the "WrapSomeMethod" call would return just Task, not Task.
Also, since this is inside of a windows service, don't forget to unsubscribe from the event if necessary.