associated_immediate_executor
关联器特性,连同 bind_immediate_executor
函数,提供了在异步操作即时完成时自定义完成处理程序执行的能力。
当支持的操作即时完成(即在发起函数内)时,会获得关联的即时执行器,并通过该执行器传递完成处理程序,如同在该执行器上使用 boost::asio::dispatch
一样。默认情况下,即时执行器会通过操作的 I/O 执行器,如同使用 boost::asio::post
一样传递完成处理程序。
例如,为了允许对 async_read_some
操作的完成处理程序进行递归调用,我们可以指定即时完成通过 system_executor
进行传递。
my_socket.async_read_some(my_buffer, bind_immediate_executor( system_executor(), [](error_code e, size_t n) { // ... } ) );
当前支持即时执行的情况包括:基于反应堆的套接字和描述符上的异步操作,以及通道上的异步操作。
注意: 在启用完成处理程序的即时执行时,必须谨慎确保不会发生无限递归和堆栈溢出。此外,即时完成的使用可能会影响完成处理程序调度的公平性,可能导致其他待处理工作被饿死。