You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET 4.6.1中按钮点击调用CheckTokenAsync异步方法卡顿

问题排查与修复方案

一、卡顿核心原因:HttpClient实例重复创建

你在CheckTokenAsync方法中每次调用都新建HttpClient实例,这会导致HTTP连接池耗尽,进而引发请求等待卡顿。.NET中HttpClient是设计为可复用的单例/静态实例,重复创建会造成不必要的资源开销和连接阻塞。

修复后的代码:

// 静态HttpClient实例,全局复用
private static readonly HttpClient _httpClient = new HttpClient();

public async Task<CheckAccessTokenModel> CheckTokenAsync()
{
    var request = new HttpRequestMessage(HttpMethod.Post, "https://keybfa.dev.aad.xxx.intranet/token");
    request.Headers.Add("Authorization", "Basic dG9iZxxxxS1hZGFwdGVyOjE5NGU5Z2NzaGJGxxxxxxxxUelJ2");

    var dic = new Dictionary<string, string>
    {
        {"grant_type", "password"},
        {"username", "user"},
        {"password", "pass"}
    };

    var content = new FormUrlEncodedContent(dic);
    request.Content = content;
          
    var response = await _httpClient.SendAsync(request).ConfigureAwait(false);

    response.EnsureSuccessStatusCode();

    var checkTokenResponseData = await response.Content.ReadAsStringAsync().ConfigureAwait(false);

    return JsonConvert.DeserializeObject<CheckAccessTokenModel>(checkTokenResponseData);
}

二、按钮点击调用方式的合理性验证

你当前的按钮事件处理写法是可行的,但需要注意两个细节:

  1. async void的异常处理:async void方法的异常无法通过常规Task捕获,建议在事件内部添加try/catch块,避免未处理异常导致程序崩溃:
private async void button1_Click(object sender, EventArgs e)
{
    try
    {
        var items = await CheckTokenAsync();
        // 在此处理返回的CheckAccessTokenModel,比如更新UI
        // 注:await后会自动回到UI线程,可直接操作控件
    }
    catch (Exception ex)
    {
        // 处理异常,比如弹窗提示
        MessageBox.Show($"请求失败:{ex.Message}");
    }
}
  1. ConfigureAwait(false)的使用:在CheckTokenAsync中使用ConfigureAwait(false)是合理的,它能避免不必要的上下文切换,提升异步操作效率。方法内部的该配置不影响后续UI操作,因为事件处理中的await会自动切换回UI上下文。

三、其他可能导致卡顿的排查点

  • 直接用Postman等工具调用目标接口https://keybfa.dev.aad.xxx.intranet/token,确认是否是接口本身响应缓慢导致卡顿。
  • 检查项目所在机器的网络环境,确认是否存在代理、防火墙等导致的网络延迟。

内容的提问来源于stack exchange,提问作者Hilario

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 22:13:14