在 ContextFut 中公平处理异步子任务
作者: bmuddha创建于 2022年2月2日更新于 2022年2月3日
标签C-bughelp wanted
在实现 `actix::contextimpl::ContextFut` 的 `Future` 特性时,有一个与邮箱处理有关的部分: https://GitHub.com/actix/actix/blob/8dfab7eca079bec0a83c6d425a37c19da5106565/actix/src/contextimpl.rs#L380-L386 实现本身是正确的,除了在邮箱不断被新消息淹没的情况下: https://GitHub.com/actix/actix/blob/8dfab7eca079bec0a83c6d425a37c19da5106565/actix/src/mailbox.rs#L77-L94 `Mailbox<A>` 的 `poll` 方法会永远卡在 while 循环中,因为 `AddressReceiver::poll_next` 会不断生成值(消息消费速率等于或低于消息生成速率),因此 `ContextFut` 无法在其他子任务上取得进展(包括 Actor 终止,如果需要)。
内容来源: actix/actix