Невозможно отловить исключение, выданное в Задаче при использовании .Result - PullRequest
0 голосов
/ 09 июля 2019

У меня есть метод для получения значения из KeyVault, например, так:

    public async Task<string> GetSecretAsync(string secret)
    {
        var azureServiceTokenProvider = new AzureServiceTokenProvider();
        var keyVaultClient = new KeyVaultClient(new KeyVaultClient.AuthenticationCallback(azureServiceTokenProvider.KeyVaultTokenCallback));

        try
        {
            var retrievedSecret = await keyVaultClient.GetSecretAsync($"{VaultUrl}/secrets/{secret}");
            return retrievedSecret.Value;
        }
        catch (Exception e)
        {
            if (e.Message.Contains("Forbidden"))
            {
                throw new KeyVaultForbiddenException("Keyvault request refused");
            }
            else if (e.Message.Contains("NotFound"))
            {
                throw new KeyVaultSecretNotFoundException("Requested secret not found");
            }

            Trace.WriteLine($"Exception getting secret: {e.Message}");
            throw e;
        }
    }

, который отлично работает в асинхронных методах.

Теперь я пытаюсь использовать его в синхронном методе(на самом деле конструктор) и он терпит неудачу - главная проблема в том, что я не могу поймать исключение, чтобы фактически выяснить, что не так

Вот как я пытаюсь использоватьit:

    public MongoRepository(IKeyVaultService KeyVaultService)
    {
        this.collectionName = typeof(T).Name;

        var databaseName = KeyVaultService.GetSecretAsync("mongoDatabaseName").Result;
        var databaseConnectionString = KeyVaultService.GetSecretAsync("mongoDatabaseConnectionString").Result;

        SetDatabase(databaseName, databaseConnectionString);
        SetCollection();
    }

Как только код перешагнет:

var retrievedSecret = await keyVaultClient.GetSecretAsync($"{VaultUrl}/secrets/{secret}");

Сбой, и я не могу поймать исключение.В консоли вывода я вижу следующее:

Exception thrown: 'Microsoft.Rest.TransientFaultHandling.HttpRequestWithStatusException' in Microsoft.Rest.ClientRuntime.dll
Exception thrown: 'Microsoft.Rest.TransientFaultHandling.HttpRequestWithStatusException' in mscorlib.dll
Exception thrown: 'System.Net.Sockets.SocketException' in System.dll
Exception thrown: 'System.Net.WebException' in System.dll
Exception thrown: 'System.Net.WebException' in System.dll
Exception thrown: 'System.Net.Http.HttpRequestException' in mscorlib.dll
Exception thrown: 'Microsoft.Azure.Services.AppAuthentication.AzureServiceTokenProviderException' in Microsoft.Azure.Services.AppAuthentication.dll
Exception thrown: 'Microsoft.Azure.Services.AppAuthentication.AzureServiceTokenProviderException' in mscorlib.dll
Exception thrown: 'Microsoft.Azure.Services.AppAuthentication.AzureServiceTokenProviderException' in mscorlib.dll
Exception thrown: 'System.Exception' in Microsoft.Azure.Services.AppAuthentication.dll
Exception thrown: 'Microsoft.Azure.Services.AppAuthentication.AzureServiceTokenProviderException' in Microsoft.Azure.Services.AppAuthentication.dll
Exception thrown: 'Microsoft.Azure.Services.AppAuthentication.AzureServiceTokenProviderException' in mscorlib.dll
Exception thrown: 'Microsoft.Azure.Services.AppAuthentication.AzureServiceTokenProviderException' in mscorlib.dll
Exception thrown: 'System.ObjectDisposedException' in System.dll
Exception thrown: 'System.ObjectDisposedException' in System.dll
Exception thrown: 'System.ObjectDisposedException' in System.dll
Exception thrown: 'System.Exception' in mscorlib.dll
Exception thrown: 'Microsoft.Azure.Services.AppAuthentication.AzureServiceTokenProviderException' in Microsoft.Azure.Services.AppAuthentication.dll
Exception thrown: 'Microsoft.Azure.Services.AppAuthentication.AzureServiceTokenProviderException' in mscorlib.dll
Exception thrown: 'Microsoft.Azure.Services.AppAuthentication.AzureServiceTokenProviderException' in mscorlib.dll
Exception thrown: 'Microsoft.IdentityModel.Clients.ActiveDirectory.AdalSilentTokenAcquisitionException' in Microsoft.IdentityModel.Clients.ActiveDirectory.dll
Exception thrown: 'Microsoft.IdentityModel.Clients.ActiveDirectory.AdalSilentTokenAcquisitionException' in mscorlib.dll
Exception thrown: 'Microsoft.IdentityModel.Clients.ActiveDirectory.AdalSilentTokenAcquisitionException' in Microsoft.IdentityModel.Clients.ActiveDirectory.dll
Exception thrown: 'Microsoft.IdentityModel.Clients.ActiveDirectory.AdalSilentTokenAcquisitionException' in mscorlib.dll
Exception thrown: 'Microsoft.IdentityModel.Clients.ActiveDirectory.AdalSilentTokenAcquisitionException' in mscorlib.dll
Exception thrown: 'Microsoft.IdentityModel.Clients.ActiveDirectory.AdalSilentTokenAcquisitionException' in mscorlib.dll
Exception thrown: 'Microsoft.IdentityModel.Clients.ActiveDirectory.AdalSilentTokenAcquisitionException' in mscorlib.dll
Exception thrown: 'Microsoft.IdentityModel.Clients.ActiveDirectory.AdalSilentTokenAcquisitionException' in mscorlib.dll

Любая точка в правильном направлении была бы отличной!

...