首页 > 解决方案 > 从 Web 表单的 Page_Load 调用异步方法

问题描述

是一个与我发现的问题相关的问题,但没有奏效。

在我的 Web 表单的页面加载方法中,我想调用异步方法

void Page_Load(object sender, EventArgs e)

我想调用异步方法,因为我希望能够GetUserInfoAsync调用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部分。

GetUserClaims(token).Wait(); 

是基于我上面链接的问题的答案。

我尝试的另一个选项是使用答案中的一个选项中提到的 PageAsyncTask 和 RegisterAsyncTask 。

    PageAsyncTask t = new PageAsyncTask(GetUserClaims(token));

但我得到了红色波浪状的东西,抱怨说

cannot convert from System.Threading.Task.Task to System.Func<System.Threading.Task.Task>

标签: c#asynchronouswebformsasync-await

解决方案


实际上这有帮助

    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();          
    }

推荐阅读