private Task<IEnumerable<GoogleAddress>> ProcessRequestAsync(HttpWebRequest request, CancellationToken? cancellationToken = null)
{
if (cancellationToken != null)
{
cancellationToken.Value.ThrowIfCancellationRequested();
cancellationToken.Value.Register(() => request.Abort());
}
var requestState = new RequestState(request, cancellationToken);
return Task.Factory.FromAsync(
(callback, asyncState) => SendRequestAsync((RequestState)asyncState, callback),
result => ProcessResponseAsync((RequestState)result.AsyncState, result),
requestState
);
}