ExecuteAsync 不会将控制权返回给调试器

8pr*_*ons 5 .net c# concurrency async-await azure-ad-msal

我正在尝试使用 MSAL.NET 获取令牌,并且几乎使用他们的开箱即用的教程代码。

using Microsoft.Identity.Client;
using MyApp.Interfaces;
using System;
using System.Threading.Tasks;

namespace MyApp.NetworkServices
{
    public class MyAuthorizationClient : IMyAuthorizationClient
    {
        private readonly string[] _resourceIds;
        private IConfidentialClientApplication App;

        public MyAuthorizationClient(IMyAuthenticationConfig MyAuthenticationConfig)
        {
            _resourceIds = new string[] { MyAuthenticationConfig.MyApimResourceID };

            App = ConfidentialClientApplicationBuilder.Create(MyAuthenticationConfig.MyApimClientID)
                .WithClientSecret(MyAuthenticationConfig.MyApimClientSecret)
                .WithAuthority(new Uri(MyAuthenticationConfig.Authority))
                .Build();
        }

        public async Task<AuthenticationResult> GetMyAccessTokenResultAsync()
        {
            AuthenticationResult result = null;

            try
            {
                result = await App.AcquireTokenForClient(_resourceIds).ExecuteAsync().ConfigureAwait(continueOnCapturedContext:false);
            }
            catch(MsalClientException ex)
            {
                ...
            }
            return result;            
    }
}
Run Code Online (Sandbox Code Playgroud)

}

我遇到的问题是,在await通话中,它永远不会返回。调试器不会恢复控制,并且应用程序会转到前台,就好像它继续运行一样。我无法询问 的结果result,并且我已经将 的配置await为不继续。

我查看了这个很棒的线程,但它没有为我的场景提供任何解决方案:Async call with wait in HttpClient never returns

8pr*_*ons 1

问题是我没有捕获一般异常。以下内容让我发现了我的问题,即我没有正确的范围:

public async Task<AuthenticationResult> GetMyAccessTokenResultAsync()
{
    AuthenticationResult result = null;

    try
    {
        result = await App.AcquireTokenForClient(_resourceIds).ExecuteAsync();
    }
    catch(MsalClientException ex)
    {
        ...
    }
    catch(Exception ex)
    {
        ...
    }

    return result;            
}
Run Code Online (Sandbox Code Playgroud)