c# – KeyVault GetSecretAsync永远不会返回
发布时间:2020-12-15 20:01:05 所属栏目:百科 来源:网络整理
导读:在Web应用程序中使用KeyVault的示例代码中包含以下代码: public static async Taskstring GetSecret(string secretId){ var secret = await keyVaultClient.GetSecretAsync(secretId); return secret.Value;} 我已将示例中包含的KeyVaultAccessor对象合并到
在Web应用程序中使用KeyVault的示例代码中包含以下代码:
public static async Task<string> GetSecret(string secretId) { var secret = await keyVaultClient.GetSecretAsync(secretId); return secret.Value; } 我已将示例中包含的KeyVaultAccessor对象合并到我的应用程序中以进行测试.该调用作为对我的一个web api控制器方法的查询的一部分执行: var secret = KeyVaultAccessor.GetSecret("https://superSecretUri").Result; 不幸的是,调用永远不会返回,查询将无限期挂起…… 可能是什么原因,因为坦白说我不知道??从哪里开始……? 解决方法
这是我
describe in full on my blog的常见死锁问题.简而言之,异步方法在await完成后尝试返回到ASP.NET请求上下文,但该请求一次只允许一个线程,并且已经有一个线程该上下文(在调用Result时被阻止的上下文).因此任务正在等待上下文自由,并且线程阻止上下文直到任务完成:死锁.
正确的解决方案是使用await而不是Result: var secret = await KeyVaultAccessor.GetSecret("https://superSecretUri"); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |