I've implemented a command pattern in a project I'm working on. This is pretty much the current structure:
public class Response
{
    public bool Success { get; private set; }
    public static Response CreateErrorResponse()
    {
        return new Response { Success = false };
    }
}
public interface ICommand<T> where T : Response
{
    Task<T> ExecuteAsync();
}
public abstract CommandBase : ICommand<T> where T: Response
{
    protected abstract Uri BuildUrl();
    protected abstract Task<T> HandleResponseAsync();
    public async override Task<T> ExecuteAsync()
    {
        var url = BuildUrl();
        var httpClient = new HttpClient();
        var response = await httpClient.GetAsync(url);
        return await HandleResponseAsync(response);
    }
}
I want to handle any exceptions that could be thrown by the HttpClient, so I want to change CommandBase.ExecuteAsync to something like this...
public async override Task<T> ExecuteAsync()
{
    var url = BuildUrl();
    var httpClient = new HttpClient();
    try
    {
        var response = await httpClient.GetAsync(url);
        return await HandleResponseAsync(response);
    }
    catch (HttpRequestException hex)
    {
        return Response.CreateErrorResponse(); // doesn't compile
    }
}
The compile error I get is "Cannot convert type Response to async return type T". I can't use T.CreateErrorResponse(), as outlined in this question. 
How can I work around this?
Edit to downvoters: whether or not you agree with catching exceptions in a library like this, the question still stands!