using System.Threading.Tasks;
public class CachingKeyVaultCertificateAuthorityProvider
private readonly AsyncLazy<string> _certificateAuthorityLazy;
public bool ThrowException { get; set; } = true;
public CachingKeyVaultCertificateAuthorityProvider()
_certificateAuthorityLazy = new AsyncLazy<string>(
async () => await GetCertificateAuthorityInternalAsync().ConfigureAwait(false));
public Task<string> GetCertificateAuthorityAsync()
return _certificateAuthorityLazy.Value;
internal async Task<string> GetCertificateAuthorityInternalAsync()
throw new Exception("exception was thrown");
return await Task.FromResult("this is the certificate");
public static void Main()
CachingKeyVaultCertificateAuthorityProvider provider = new CachingKeyVaultCertificateAuthorityProvider();
Console.WriteLine("throw exception: " + provider.ThrowException);
TryLogCertificateAuthority(provider);
provider.ThrowException = false;
Console.WriteLine("throw exception: " + provider.ThrowException);
TryLogCertificateAuthority(provider);
public static void TryLogCertificateAuthority(CachingKeyVaultCertificateAuthorityProvider provider)
string cert = provider.GetCertificateAuthorityAsync().GetAwaiter().GetResult();
Console.WriteLine(ex.Message);