【发布时间】:2021-06-03 15:21:20
【问题描述】:
我有一个 WPF 应用程序,它使用与 Azure 存储 blob 的连接。它适用于连接字符串,但我想通过 Active Directory(带有登录窗口)访问 blob。最好的解决方案似乎是使用 InteractiveBrowserCredential,但我这里有个问题 - 有时会显示弹出窗口并且我已通过身份验证并且可以成功获取 blob,但 有时浏览器弹出窗口不是显示并且应用程序挂起...没有抛出错误。
我正在像这样使用 InteractiveBrowserCredential:
var blobContainerClient = new BlobContainerClient(new Uri(...)), new InteractiveBrowserCredential());
然后通过前缀获取 blob:
var blobs = blobContainerClient.GetBlobs(prefix: prefix);
var files = blobs.Select(b => ...);
IEnumerable<string> res = files.AsParallel().Select(b => ...).ToArray(); //program hangs here
return res;
而且程序有时无法继续。
但如果我打电话,例如:
blobContainerClient.Exists()
程序总是挂起并且从不执行......(仍然有任何错误......)
我发现了一个报告的bughttps://github.com/Azure/azure-sdk-for-net/issues/10083,这里用这种方法描述死锁,因为有异步实现的同步版本:
public override AccessToken GetToken(TokenRequestContext requestContext, CancellationToken cancellationToken = default)
{
return GetTokenImplAsync(requestContext, cancellationToken).GetAwaiter().GetResult();
}
GetTokenImplAsync(requestContext,cancellationToken) 返回 ValueTask 的地方,他们可能会在不完整的任务上调用 .GetAwaiter().GetResult() 。这可能是我遇到的问题吗?如果是,如何解决?
【问题讨论】:
标签: .net wpf azure authentication azure-storage