def METHOD_NAME(
    self,
    task_name: str,
    task_inputs: Dict[str, Shareable],
    abort_signal: Signal = None,
) -> Dict[str, DXO]:
    tasks: Dict[str, Task] = self.get_tasks(task_name, task_inputs)
    for client_name in tasks:
        self.controller.broadcast(task=tasks[client_name], fl_ctx=self.fl_ctx, targets=[client_name])
    for client_name in tasks:
        self.log_info(self.fl_ctx, f"wait for client {client_name} task")
        self.controller.wait_for_task(tasks[client_name], abort_signal)
    return self.results