title: Convert a native `asyncio` coroutine into a task that can be submitted to a `concurrent.futures` ThreadPoolExecutor
body: <p>I have an async function that I would like to run. For the sake of this question lets say it is:</p>
  <pre><code>async def __increment_percent_complete(self):
      timeout_start = time.time()        
      duration = 5
  
      while time.time() &lt; (timeout_start + duration):
          time_since_start = time.time() - timeout_start
          percent_complete = (time_since_start / duration) * 100.0
          self.get_logger().info(f&quot;Percent complete: {int(percent_complete)}%&quot;)
          await asyncio.sleep(0.5)
  
      self.get_logger().info(&quot;Done!&quot;)
  </code></pre>
  <p>I then have a <code>concurrent.futures.ThreadPoolExecutor</code>, and my own &quot;event loop&quot; that looks someting like this:</p>
  <pre><code>executor = ThreadPoolExecutor(num_threads)
  while True:
      callback: Task = wait_for_ready_callbacks() #return callbacks that are ready to be executed
      executor.submit(callback)
  </code></pre>
  <p>How can I turn the native coroutine into a task that can be submitted to the executor?</p>