title: Differences between C# async and Java ExecutorService
body: <p>C# has a cool new feature</p>
  
  <pre><code>public Task&lt;string&gt; async f()
  {
      string r = LongCompute();
      return r;
  }
  </code></pre>
  
  <p>but isn't that equivalent to</p>
  
  <pre><code>public Future&lt;String&gt; f() {
      return Globals.executorService.submit(new Callable&lt;String&gt;() {
          public String call() throws Exception {
              String r = longCompute();
              return r;
          }
      });
  }
  </code></pre>
  
  <p>where in Java you have more flexibility to choose the threadpool in which the task would run.</p>
  
  <p>What about await? It's equivalent to just calling get</p>
  
  <pre><code>string s = await f();
  </code></pre>
  
  <p>is just like</p>
  
  <pre><code>String s = f().get();
  </code></pre>
  
  <p>Is there anything more to C#, or is it indeed just a syntactic sugar to the Java version? (I'm not a C# guru, so I might be missing something).</p>