从Azure Key Vault检索机密:任务<string>还是常规字符串?

时间:2019-12-14 12:32:35

标签: azure-keyvault

我有两种从保险库中检索秘密的方法。一个是异步的,而另一个则不是。

异步:

public static async Task<string> GetSecret(string secretName)
    {
        try
        {
            return (await GetClient().GetSecretAsync("VaultURL", secretName)).Value;
        }

        catch (Exception ex)
        {
            return ex.Message;
        }
    }

不异步:

      public static string GetSecretWithoutAwait(string SecretName)
    {
        var azureServiceTokenProvider = new AzureServiceTokenProvider();
        var keyVaultClient = new KeyVaultClient(new KeyVaultClient.AuthenticationCallback(azureServiceTokenProvider.KeyVaultTokenCallback));
        return keyVaultClient.GetSecretAsync("vaultUrl", SecretName).Result.Value;
    }

没有异步方法最适合我的需求,如果可能的话,我宁愿保持这种方式。使检索成为非异步过程有什么后果?

1 个答案:

答案 0 :(得分:0)

  

使检索成为非异步过程有什么后果?

Result成员仅以Task<T>类型存在; Task类型不存在。

就像等待,结果将同步阻塞调用线程,直到任务完成。一般而言,这不是一个好主意,原因与对Wait来说不是一个好主意:容易造成死锁

如果必须阻止等待Async任务完成,请使用GetAwaiter().GetResult()WaitResult会将所有异常包装在AggregateException中,这会使错误处理变得复杂。 GetAwaiter().GetResult()的优点是它返回普通异常,而不是AggregateException

所以我建议您使用Async方法来检索机密