<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def synchronize_task(self, func, *args, **kwargs):
 """Run callable in the rpc thread and wait for it to finish. The callable ``func`` will be passed into the EmulationLoop and run there. This method will block until ``func`` is finished and return/raise whatever that callable returns/raises. This method is mainly useful for performing an activity that needs to be synchronized with the rpc thread for safety reasons. If this method is called from the rpc thread itself, it will just run the task and return its result. Args: func (callable):
 A method with signature callable(*args, **kwargs), that will be called with the optional *args and **kwargs passed to this method. *args: Arguments that will be passed to callable. **kwargs: Keyword arguments that will be passed to callable. Returns: object: Whatever callable returns after it runs. """


        async def _runner():
            return func(*args, **kwargs)

        return self.emulator.run_task_external(_runner())