我想從Azure AD獲取訪問令牌,並且異步調用永遠不會結束。我不確定自己做錯了什麼,也許有人可以指引我走向正確的方向。這是代碼:從非異步方法運行異步代碼
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()
的可能的複製[我將如何運行的異步任務方法同步?] (http://stackoverflow.com/questions/5095183/how-would-i-run-an-async-taskt-method-synchronously) –
Igor
@Igor:在這個問題上接受的答案有嚴重的重入問題。請不要推薦它。 –