title: Difference between Spring MVC's @Async, DeferredResult and Callable
body: <p>I've a long-running task defined in a Spring service. It is started by a Spring MVC controller. I want to start the service and return back an <code>HttpResponse</code> to the caller before the service ends. The service saves a file on file system at end.
  In javascript I've created a polling job to check service status.</p>
  
  <p>In Spring 3.2 I've found the <code>@Async</code> annotation, but I don't understand how it is different from <code>DeferredResult</code> and <code>Callable</code>. When do I have to use <code>@Async</code> and when should I use <code>DeferredResult</code>?</p>