我有两种方法可以从我的保险库中检索秘密。一个是异步的,而另一个不是。
异步:
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 方法来检索秘密
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句