Я пытаюсь получить токен доступа от Azure AD, и асинхронный вызов никогда не заканчивается. Я не уверен, что я делаю неправильно, может быть, кто-то может указать мне в правильном направлении. Это код:запустить асинхронный код из метода non async
private static void GetAccessTokenNonAsync()
{
Func<System.Threading.Tasks.Task> task = async() => { await GetAccessToken().ConfigureAwait(false); };
task().Wait();
}
private static async Task<AuthenticationResult> GetAccessToken()
{
string aadInstance = ConfigurationManager.AppSettings["ida:AADInstance"];
string clientId = ConfigurationManager.AppSettings["ida:ClientId"];
string clientSecret = ConfigurationManager.AppSettings["ida:ClientSecret"];
string source = ConfigurationManager.AppSettings["ExchangeOnlineId"];
var authContext = new AuthenticationContext(aadInstance, false);
var credentials = new ClientCredential(clientId, clientSecret);
var appRedirectUrl = HttpContext.Current.GetOwinContext().Request.Scheme + "://" + HttpContext.Current.GetOwinContext().Request.Host + HttpContext.Current.GetOwinContext().Request.PathBase + "/";
var res =
await
authContext.AcquireTokenByAuthorizationCodeAsync(
((ClaimsIdentity)HttpContext.Current.User.Identity).FindFirst("AuthenticationCode").Value,
new Uri(appRedirectUrl), credentials, source).ConfigureAwait(false);
Current.AccessToken = res.AccessToken;
return res;
}
private static string AccessToken
{
get
{
return HttpContext.Current.Session["AccessToken"].ToString();
}
set { HttpContext.Current.Session["AccessToken"] = value; }
}
И в моем основном методе, который я называю GetAccessTokenNonAsync()
Возможный дубликат [Как я запустить Task асинхронной метод синхронно?] (http://stackoverflow.com/questions/5095183/how-would-i-run-an-async-taskt-method-synchronously) –
Igor
@Igor: принятый ответ на этот вопрос имеет серьезные проблемы с возвращением. Пожалуйста, не рекомендуем. –