Closed GZTimeWalker closed 10 months ago
换成 cancellation_token
的实现后没有问题了,语义是否一致 @darkyzhou 可以检查一下。
作为一些参考,原来的函数:
tokio::spawn(async move {
handle.on_shutdown_requested().await;
trigger.trigger();
});
on_shutdown_requested
的实现:
pub async fn on_shutdown_requested(&self) {
self.inner.cancellation_token.cancelled().await
}
但是这会导致 handle
的所有权转移。修改后,获取 cancellation_token
:
pub fn create_cancellation_token(&self) -> CancellationToken {
self.inner.cancellation_token.child_token()
}
最后在 tokio::spawn
中进行等待:
let cancellation_token = handle.create_cancellation_token();
tokio::spawn(async move {
cancellation_token.cancelled().await;
// ...
});
启动时报错,但不影响处理评测任务。