从 Azure Key Vault 检索 Secret:Task<string> 还是常规字符串?

Retrieving Secret from Azure Key Vault: Task<string> or regular string?

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

异步:

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;
    }

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

What are the consequences to making the retrieval a non-async process?

Result成员只存在于Task<T>类型;它在 Task 类型上不存在。

和Wait一样,Result会同步阻塞调用线程直到任务完成。这通常不是一个好主意,原因与它对 Wait 不是一个好主意的原因相同:很容易导致死锁

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

所以我建议你使用异步方法来检索秘密