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 通知
而取得进度的任务。
通常,对运行时轮询任务的顺序的更改不 被视为破坏性更改,你的程序应在无论运行时 以何种顺序轮询你的任务时都是正确的。