Is it okay to attach async event handler to System.Timers.Timer?

后端 未结 2 1346
小鲜肉
小鲜肉 2021-01-04 02:49

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

2条回答
  •  孤独总比滥情好
    2021-01-04 03:20

    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.

提交回复
热议问题