我想在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,因为消息处理不应该阻止,以便应用程序在处理期间仍然可以接收其他消息 .