我有两种从保险库中检索秘密的方法。一个是异步的,而另一个则不是。
异步:
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;
}
没有异步方法最适合我的需求,如果可能的话,我宁愿保持这种方式。使检索成为非异步过程有什么后果?
答案 0 :(得分:0)
使检索成为非异步过程有什么后果?
Result
成员仅以Task<T>
类型存在; Task
类型不存在。
就像等待,结果将同步阻塞调用线程,直到任务完成。一般而言,这不是一个好主意,原因与对Wait来说不是一个好主意:容易造成死锁。
如果必须阻止等待Async
任务完成,请使用GetAwaiter().GetResult()
。 Wait
和Result
会将所有异常包装在AggregateException
中,这会使错误处理变得复杂。 GetAwaiter().GetResult()
的优点是它返回普通异常,而不是AggregateException
。
所以我建议您使用Async方法来检索机密