How to call wcf service Asynchronously

.net, asynchronous, c#, wcf

Solution

I think the best way is to convert the APM pattern into the Task pattern, using `Task.Factory.FromAsync`:

public static class WcfExt
{
    public static Task<int> AddAsync(this IAddTwoNumbers service, int a, int b)
    {
        return Task.Factory.FromAsync(
             (asyncCallback, asyncState) =>
                 service.BeginAdd(a, b, asyncCallback, asyncState),
             (asyncResult) =>
                 service.EndAdd(asyncResult), null);
    }
}

Usage:

IAddTwoNumbers service = CreateWcfClientProxy();
int result = await service.AddAsync(a, b);

Problem

if wcf service is design the below way then please guide me how call `Add()` function `Asynchronously` from client side. thanks ``` [ServiceContract] public interface IAddTwoNumbers { // If the asynchronous method pair // appears on the client channel, the client can call // them asynchronously to prevent blocking. [OperationContract (AsyncPattern=true)] IAsyncResult BeginAdd(int a, int b, AsyncCallback cb, AsyncState s); [OperationContract] int EndAdd(IAsyncResult r); // This is a synchronous version of the BeginAdd/EndAdd pair. // It appears in the client channel code by default. [OperationContract] int Add(int a, int b); } ```

Original source