title: Is there a significant difference between making a [IsOneWay=true] WCF service async and calling the sync method using a Task on the client?
body: <p>If I have a service defined so:</p>
  
  <pre><code>[ServiceContract(SessionMode = SessionMode.NotAllowed)]
  public interface IMyService
  {
      [OperationContract(IsOneWay = true)]
      [ReceiveContextEnabled(ManualControl = true)]
      void DoSomething(Message&lt;XElement&gt; message);
  }
  </code></pre>
  
  <p>and I want to call it asyncronously from my client (using shared contracts not generating from svcutil or add service reference) I can do:</p>
  
  <pre><code>Task task = Task.Factory.StartNew(() =&gt; myService.DoSomething(message));
  
  ... some other code
  
  task.Wait();
  </code></pre>
  
  <p>I could also define my service to be async:</p>
  
  <pre><code>[ServiceContract(SessionMode = SessionMode.NotAllowed)]
  public interface ICacheKeyExchangeAsync
  {
      [OperationContract(IsOneWay = true, AsyncPattern = true)]
      [ReceiveContextEnabled(ManualControl = true)]
      IAsyncResult BeginDoSomething(Message&lt;XElement&gt; message, AsyncCallback callback, object state);
      void EndDoSomething(IAsyncResult result);
  }
  </code></pre>
  
  <p>and do this instead</p>
  
  <pre><code>IAsyncResult result = myService.BeginDoSomething(message, null, null);
  
  .... some other code
  
  myService.EndDoSomething(result);
  </code></pre>
  
  <p>Are there significant differences between the approaches?</p>