Есть ли существенная разница между выполнением асинхронной службы WCF [IsOneWay = true] и вызовом метода синхронизации с помощью Задачи на клиенте?

Если у меня есть служба, определенная так:

[ServiceContract(SessionMode = SessionMode.NotAllowed)]
public interface IMyService
{
    [OperationContract(IsOneWay = true)]
    [ReceiveContextEnabled(ManualControl = true)]
    void DoSomething(Message<XElement> message);
}

и я хочу вызвать его асинхронно от моего клиента (используя общие контракты, не генерируемые из svcutil или добавить ссылку на службу), я могу сделать:

Task task = Task.Factory.StartNew(() => myService.DoSomething(message));

... some other code

task.Wait();

Я также мог бы определить мой сервис как асинхронный:

[ServiceContract(SessionMode = SessionMode.NotAllowed)]
public interface ICacheKeyExchangeAsync
{
    [OperationContract(IsOneWay = true, AsyncPattern = true)]
    [ReceiveContextEnabled(ManualControl = true)]
    IAsyncResult BeginDoSomething(Message<XElement> message, AsyncCallback callback, object state);
    void EndDoSomething(IAsyncResult result);
}

и сделать это вместо

IAsyncResult result = myService.BeginDoSomething(message, null, null);

.... some other code

myService.EndDoSomething(result);

Существуют ли существенные различия между подходами?

Ответы на вопрос(2)

Ваш ответ на вопрос