azure-keyvault - 从 Azure Key Vault 检索机密:任务还是常规字符串?
问题描述
我有两种方法可以从我的保险库中检索秘密。一个是异步的,而另一个不是。
异步:
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;
}
没有异步方法最适合我的需要,如果可能的话,我更喜欢保持这种方式。使检索成为非异步过程的后果是什么?
解决方案
使检索成为非异步过程的后果是什么?
Result
成员只存在于Task<T>
类型上;Task
它在类型上不存在。
和 Wait 一样,Result 会同步阻塞调用线程,直到任务完成。这通常不是一个好主意,原因与 Wait 不是一个好主意的原因相同:很容易导致死锁。
如果您必须阻止等待Async
任务的完成,请使用GetAwaiter().GetResult()
. Wait
并将Result
任何异常包装在 中AggregateException
,这会使错误处理复杂化。的优点GetAwaiter().GetResult()
是它返回一个正常的异常而不是一个AggregateException
.
所以我建议你使用 Async 方法来检索秘密
推荐阅读
- php - 在 php MVC 框架中使用 jquery 加载视图的问题
- python - 如果无法投射 Python,则删除列表中的项目
- laravel - EC2:Laravel 迁移运行的次数与实例一样多
- python - Python,酸洗列表到文件
- php - 比较两个字符串时输出错误
- python - 将列表的数据框重塑为另一个数据框
- go - 如何获取集群内 go Kubernetes 客户端的当前命名空间
- javascript - 如何在数组中查找对象并将其显示在 React 组件中?
- php - 超时错误与 php.ini 中设置的不匹配
- c# - 通过 azure 通知中心 apns 发送推送通知