<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def add_task(self, tile_address, coroutine):
 """Add a task into the event loop. This is the main entry point for registering background tasks that are associated with a tile. The tasks are added to the EmulationLoop and the tile they are a part of is recorded. When the tile is reset, all of its background tasks are canceled as part of the reset process. If you have a task that should not be associated with any tile, you may pass `None` for tile_address and the task will not be cancelled when any tile is reset. Args: tile_address (int):
 The address of the tile running the task. coroutine (coroutine):
 A coroutine that will be added to the event loop. """


        self._loop.call_soon_threadsafe(self._add_task, tile_address, coroutine)