asyncio.run_coroutine_threadsafe will return a concurrent.futures.Future.
And according to its doc concurrent.futures.Future.add_done_callback() :
Added callables are called in the order that they were added and are always ** called in a thread belonging to the process that added them. **
But acually, the callback is called in where Future.set_result() is called according to its source.
Linked PRs