外部サービスへの非同期呼び出しでGlobal.asax.csのsession_startでASP MVCコードをリファクタリングしています。私は、IEで無限回転の白いページを取得するか、実行がすぐに呼び出しスレッドに戻ります。 Session_start()で.Resultを試してみたとき、回転するIEアイコン付きの白いページが表示されました。 .ContinueWith()を試してみると、実行は非同期の結果に依存する次の行に戻ります。したがって、authResultは常にnullです。助けてもらえますか?ありがとう。async getting no where
これは、これはこれはHttpClientを
を使用して実際の呼び出しを行うヘルパークラスであるUser_Controllerクラスからpublic async Task <AuthResult> checkUserViaWebApi(string networkName) {
UserProfile _thisProfile = await VhaHelpersLib.WebApiBroker.Get <UserProfile> (
System.Configuration.ConfigurationManager.AppSettings["userWebApiEndpoint"], "User/Profile/" + networkName);
AuthResult authenticationResult = new AuthResult();
if (_thisProfile == null) /*no user profile*/ {
authenticationResult.Result = enumAuthenticationResult.NoLSV;
authenticationResult.Controller = "AccessRequest";
authenticationResult.Action = "LSVInstruction";
}
でのsession_start()
if (Session["userProfile"] == null) {
//call into an async method
//authResult = uc.checkUserViaWebApi(networkLogin[userLoginIdx]).Result;
var userProfileTask = uc.checkUserViaWebApi(networkLogin[userLoginIdx])
.ContinueWith(result => {
if (result.IsCompleted) {
authResult = result.Result;
}
});
Task.WhenAll(userProfileTask);
if (authResult.Result == enumAuthenticationResult.Authorized) {
からです
public static async Task<T> Get<T>(string baseUrl, string urlSegment) { string content = string.Empty; using(HttpClient client = GetClient(baseUrl)) { HttpResponseMessage response = await client.GetAsync(urlSegment.TrimStart('/')).ConfigureAwait(false); if(response.IsSuccessStatusCode) { content = await response.Content.ReadAsStringAsync(); } return JsonConvert.DeserializeObject<T>(content); }
あなたはこの質問を見てみたいことがあります。http://stackoverflow.com/questions/15167243/session-issue-when-having-async-session-start-method –
は、私はそれをしようとしたが、それはしませんでした働いた。 – user266909
asyncを使用している唯一の理由は、 'HttpClient'を使用しているためです。useは' 'WebClient.DownloadString'を使用できます(https://msdn.microsoft.com/en-us/library/fhd1f0sw(v = vs.110).aspx)でなく、非同期ではありません。 –