Here是一个与我发现的问题有关的问题,该问题不起作用。
在Web表单的页面加载方法中,我想调用异步方法
void Page_Load(object sender, EventArgs e)
我想调用异步方法,因为我希望能够调用GetUserInfoAsync
的{{1}}方法
这就是我所拥有的
IdentityModel
当前的问题是我从未达到 protected void Page_Load(object sender, EventArgs e)
{
var token = HttpContext.Current.Request.Headers.Get("Authorization");
GetUserClaims(token).Wait();
}
public async Task GetUserClaims(string token)
{
var client = new HttpClient();
var response = await client.GetUserInfoAsync(new UserInfoRequest
{
Address = "https://localhost:44367/connect/userinfo",
Token = token,
});
var result = response.Claims;
}
部分。
result = response.claims
基于我上面链接的问题的答案。
我尝试的另一个选项是使用答案中一个选项中提到的PageAsyncTask和RegisterAsyncTask。
GetUserClaims(token).Wait();
但是我收到红色的波浪状东西,抱怨说
PageAsyncTask t = new PageAsyncTask(GetUserClaims(token));
答案 0 :(得分:1)
如链接的问题所建议的那样,如果您绝对不能使Page_Load事件处理程序async void
起作用,则正确的方法是:
GetUserClaims(token).ConfigureAwait(false).GetAwaiter().GetResult();
为避免在致电Wait()
时发生deadlock。
您还需要将.ConfigureAwait(false)
添加到所有嵌套的异步调用中,以确保在相同的上下文中恢复执行:
UserInfoResponse response = await client.GetUserInfoAsync(new UserInfoRequest
{
Address = "https://localhost:44367/connect/userinfo",
Token = token,
}).ConfigureAwait(false);
答案 1 :(得分:1)
实际上这有所帮助
protected void Page_Load(object sender, EventArgs e)
{
var token = HttpContext.Current.Request.Headers.Get("Authorization");
PageAsyncTask t = new PageAsyncTask(() => GetUserClaims(token));
// Register the asynchronous task.
Page.RegisterAsyncTask(t);
// Execute the register asynchronous task.
Page.ExecuteRegisteredAsyncTasks();
//GetUserClaims(token).ConfigureAwait(false).GetAwaiter().GetResult();
}