Listening for several connections in an async method
I think Task.Factory.FromAsync is what you are looking for...

public async Task Start(CancellationToken token)
{
     while (!token.IsCancellationRequested)
     {
         Socket connectedClient = await AcceptAsync(this.socket).ConfigureAwait(false);
         ...
     }
}

public static Task&lt;Socket&gt; AcceptAsync(Socket socket)
{
     return Task.Factory.FromAsync&lt;Socket&gt;(socket.BeginAccept, socket.EndAccept, null);
}