pub async fn run_once(self, mut stop_receiver: watch::Receiver<bool>) -> anyhow::Result<()> {
        let l1_client_check = Self::check_client(self.l1_client, self.l1_chain_id.0.into());
        let main_node_l1_check =
            Self::check_l1_chain_using_main_node(self.main_node_client.clone(), self.l1_chain_id);
        let main_node_l2_check =
            Self::check_l2_chain_using_main_node(self.main_node_client, self.l2_chain_id);

        let joined_futures =
            futures::future::try_join3(l1_client_check, main_node_l1_check, main_node_l2_check)
                .fuse();
        tokio::select! {
            res = joined_futures => res.map(drop),
            _ = stop_receiver.changed() =>  Ok(()),
        }
    }
Runs the task once, exiting either when all the checks are performed or when the stop request is received.
core/node/node_sync/src/validate_chain_ids_task.rs