def parallel_print_do(self, tasks: List[Task]):
        """Execute multiple tasks in parallel, print their results, and return them.
        
        Args:
            tasks: A list of Task objects to execute in parallel
            
        Returns:
            A list of task responses in the same order as the input tasks
        """
        import asyncio
        
        try:
            # Check if there's a running event loop
            loop = asyncio.get_running_loop()
            if loop.is_running():
                # If there's a running loop, run the coroutine in that loop
                return asyncio.run_coroutine_threadsafe(
                    self.parallel_print_do_async(tasks), 
                    loop
                ).result()
        except RuntimeError:
            # No running event loop
            pass
        
        # If no running loop or exception occurred, create a new one
        return asyncio.run(self.parallel_print_do_async(tasks))
Execute multiple tasks in parallel, print their results, and return them.
        
        Args:
            tasks: A list of Task objects to execute in parallel
            
        Returns:
            A list of task responses in the same order as the input tasks
        
src/upsonic/client/agent_configuration/agent_configuration.py