using System.Threading.Tasks; public interface IDapperAsyncImplementor { Task GetAsync(IDbConnection connection, object id, IDbTransaction transaction, int? commandTimeout) where T : class; } public interface IDbConnection { } public interface IDbTransaction { } public static class Issue3320 { public static IDapperAsyncImplementor Instance => null; public static async Task GetAsync(this IDbConnection connection, dynamic id, IDbTransaction transaction = null, int? commandTimeout = null) where T : class { dynamic async = Instance.GetAsync(connection, id, transaction, commandTimeout); return await async; } }