title: Future does not complete reliably in Play Framework
body: <p>A piece of code using Play Framework 2.3</p>
  
  <pre><code>def signup = Action(parse.json) { implicit request =&gt;
    val email = (request.body \ "email").asOpt[String]
  
    val holder =
      WS.url("https://foobar.com/foo")
        .withAuth("1234","5678",WSAuthScheme.BASIC)
  
    val data = Json.obj(
      "email" -&gt; email,
    )
  
    holder.post(data)
    Ok("OK")
  }
  </code></pre>
  
  <p>This code will perform the post() when run locally on my machine, but not reliably on remote machines. From my understanding the post() call should create and return a future, signup() returns Ok(), the future is run on the default ExecutionContext and at some point completes and is cleaned up. Apparently this is not the case.</p>
  
  <p>I have since changed the function to be an Action.async and am now waiting on the Future:</p>
  
  <pre><code>val res = holder.post(data)
  res.map( x =&gt; Ok(Json.obj("status" -&gt; "OK"))) recover {
    case (e: Exception) =&gt;
      InternalServerError(Json.obj("status" -&gt; "Not OK."))
  }
  </code></pre>
  
  <p>This works reliably. Hence, my questions:</p>
  
  <ul>
  <li>Why does the first version not work reliably?</li>
  <li>How can I in general "fork off" a long running procedure, without intention of waiting on it, purely for its side-effects, if not like I did in version 1?</li>
  </ul>