【发布时间】:2022-10-05 01:32:37
【问题描述】:
我想分叉/运行两个线程,每个线程都应该做一些工作(比如调用 REST API)。但是,如果尚未返回,我希望它们在达到某个超时阈值时停止/中断。
目前,我正在使用tokio::spawn(),但仍然无法生成这样的代码。尽管任何关键字都会受到赞赏,但代码 sn-p 会更有价值。
【问题讨论】:
-
您可能希望将 stop-after-timeout-period-expired 逻辑添加到线程本身,以便线程自动退出。从外部停止线程意味着线程将没有机会清理它可能分配的任何资源,这可能会导致资源泄漏和/或死锁(如果线程在停止运行时锁定了一个或多个互斥锁) )
-
谢谢@JeremyFriesner,正确的推理。我在想是否存在类似 tokio::timedout_spawn 的东西。
-
可以将任务变成异步函数/未来,还是必须是在线程上运行的同步函数?如果它可以变成未来,那么您可以将其包装在
timeout中。 -
@cdhowie,哦,哇,我没想到超时也会与 spawn 一起使用。我会试一试。
-
@Jaafar它会工作,但一旦发生超时它就不会中止任务;任务将运行完成,但永远不会观察到结果。
标签: multithreading rust rust-tokio