refactor: remove ScopedTask (#2125)

* replace ScopedTask with AbortOnDropHandle
This commit is contained in:
Luna Yao
2026-04-25 15:20:25 +08:00
committed by GitHub
parent 820d9095d3
commit 5a1668c753
32 changed files with 161 additions and 300 deletions
+9 -8
View File
@@ -11,8 +11,8 @@ use tokio::select;
use tokio::sync::Notify;
use tokio::task::JoinHandle;
use crate::common::scoped_task::ScopedTask;
use anyhow::Error;
use tokio_util::task::AbortOnDropHandle;
use super::peer_manager::PeerManager;
@@ -72,7 +72,7 @@ pub trait PeerTaskLauncher: Send + Sync + Clone + 'static {
pub struct PeerTaskManager<Launcher: PeerTaskLauncher> {
launcher: Launcher,
main_loop_task: Mutex<Option<ScopedTask<()>>>,
main_loop_task: Mutex<Option<AbortOnDropHandle<()>>>,
run_signal: Arc<Notify>,
external_signal: Option<Arc<ExternalTaskSignal>>,
data: Launcher::Data,
@@ -105,13 +105,12 @@ where
}
pub fn start(&self) {
let task = tokio::spawn(Self::main_loop(
let task = AbortOnDropHandle::new(tokio::spawn(Self::main_loop(
self.launcher.clone(),
self.data.clone(),
self.run_signal.clone(),
self.external_signal.clone(),
))
.into();
)));
self.main_loop_task.lock().unwrap().replace(task);
}
@@ -121,7 +120,7 @@ where
signal: Arc<Notify>,
external_signal: Option<Arc<ExternalTaskSignal>>,
) {
let peer_task_map = Arc::new(DashMap::<C, ScopedTask<Result<T, Error>>>::new());
let peer_task_map = Arc::new(DashMap::<C, AbortOnDropHandle<Result<T, Error>>>::new());
let mut external_signal_version = external_signal.as_ref().map(|signal| signal.version());
loop {
@@ -158,8 +157,10 @@ where
}
tracing::debug!(?item, "launch hole punching task");
peer_task_map
.insert(item.clone(), launcher.launch_task(&data, item).await.into());
peer_task_map.insert(
item.clone(),
AbortOnDropHandle::new(launcher.launch_task(&data, item).await),
);
}
} else if peer_task_map.is_empty() {
launcher.all_task_done(&data).await;