跳到主要内容

yield_now

搜索

函数 yield_now 

Source
pub async fn yield_now()
展开描述

Yields execution back to the Tokio 运行时。

任务通过对 yield_now() 进行 await 来让出, 并在该 future 完成时恢复(无输出)。 当前任务将作为待处理任务重新添加 到待处理队列的末尾。 任何其他待处理任务都将被调度。 不需要其他唤醒 即可使该任务继续。

另请参阅 task 模块 中的用法示例。

§非保证

如果在调用堆栈中此函数上方 有任何特殊的 combinator, 则此函数可能不会 一直让出到 executor。 例如, 如果 tokio::select! 在与 yield_now() 相同的轮询中 有另一个分支完成, 那么让出 不会一直传播到运行时。

通常, 在 yield_now() 调用之后, 运行时在决定接下来调度哪个任务时, 其行为可能不像你预期的那样。 特别的, 运行时可能会立即再次轮询 刚刚运行 yield_now() 的任务, 而不先轮询任何其他任务。 例如, 运行时不会在每次轮询任务之间 驱动 IO driver, 这可能会导致运行时 立即再次轮询当前任务, 即使存在另一个可以通过 等待 IO driver 通知 而取得进度的任务。

通常,对运行时轮询任务的顺序的更改不 被视为破坏性更改,你的程序应在无论运行时 以何种顺序轮询你的任务时都是正确的。