从 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()
。 Wait
和 Result
会将任何异常包装在 AggregateException
中,这会使错误处理变得复杂。 GetAwaiter().GetResult()
的优点是它 returns 是一个正常的异常而不是 AggregateException
.
所以我建议你使用异步方法来检索秘密
我有两种方法可以从我的保险库中检索机密。一个是异步的,而另一个不是。
异步:
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()
。 Wait
和 Result
会将任何异常包装在 AggregateException
中,这会使错误处理变得复杂。 GetAwaiter().GetResult()
的优点是它 returns 是一个正常的异常而不是 AggregateException
.
所以我建议你使用异步方法来检索秘密