title: Tornado - getting return value from IOLoop.add_callback()
body: <p>I'm not sure what the difference is between the following two functions:</p>
  
  <pre><code> IOLoop.add_callback(callback, *args, **kwargs) 
  </code></pre>
  
  <p>AND</p>
  
  <pre><code>IOLoop.spawn_callback(callback, *args, **kwargs)
  </code></pre>
  
  <p>I did read the documentation however didn't really understand what <code>stack_context</code> is. It seems like a way to preserve variables between calls to other threads but not sure. Since the <code>spawn_callback</code> doesn't use the <code>stack_context</code> does this mean exceptions will not be passed back to the caller?</p>
  
  <p>Either way I know I need to use one of these to call a coroutine method within a non-coroutine method. However I'm unsure how to get the return value using any of these methods. I need to asynchronously call the <code>httpClient.fetch()</code> within the <code>on_message()</code> within a <code>tornado.websocket.WebSocketHandler</code> object. </p>