I have an interface `INetwork` with a method:

```
Task<bool> SendAsync(string messageToSend, CancellationToken ct)

```

One implementation of the interface has code like this:

```
public async Task<bool> SendAsync(string messageToSend, CancellationToken ct)
{
  var udpClient = new UdpClient();
  var data = Encoding.UTF8.GetBytes (messageToSend);
  var sentBytes = await udpClient.SendAsync(data);
  return sentBytes == data.Length; 
}

```

Unfortunately, `SendAsync()` of the `UdpClient` class does not accept a `CancellationToken`.

So I started changing it to:

```
public Task<bool> SendAsync(string messageToSend, CancellationToken ct)
{
  var udpClient = new UdpClient();
  var data = Encoding.UTF8.GetBytes (messageToSend);
  var sendTask = udpClient.SendAsync(data);
  sendTask.Wait(ct);

  if(sendTask.Status == RanToCompletion)
  {
    return sendTask.Result == data.Length;
  }
}

```

Obviously this won't work because there is no `Task` being returned. However if I return the Task, the signatures don't match anymore. `SendAsync()` returns a `Task<int>`, but I need a `Task<bool>`.

And now I'm confused. :-)
How to resolve this?