我想在C#Windows服务中的非异步上下文中使用async / await模式。 我将使用非异步Queue API。 API的通信器类(用于通信)的定义包含一个事件,只要有人通过队列向我的应用程序发送消息就会触发该事件。 在我的事件处理程序中,我需要启动一个新线程或使用ThreadPool在另一个线程上处理收到的消息,以便应用程序在此期间仍然可以接收其他消息。
通常我会这样做:
ThreadPool.QueueUserWorkItem( x => { /* message processing here */ } );
但在这种情况下,我想在消息处理中使用async / await模式。 我是否需要使用Task的Wait方法启动一个新任务并等待它,或者有更好的方法来执行此操作:
ThreadPool.QueueUserWorkItem( x => Task
.Run( async () =>
{
// await async operation here
} )
.Wait() );
我仍然在第二项中使用ThreadPool.QueueUserWorkItem,因为消息处理不应该阻止,以便应用程序在处理期间仍然可以接收其他消息。