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

抛出Exception但try-catch未捕获?异步方法调用异常排查

问题解析:异步方法赋值引发的ArgumentException异常

你遇到的异常不是来自GetCurrentVersionAsync内部的网络请求逻辑,而是调用异步方法时未正确使用await导致的类型不匹配问题。

问题代码回顾

调用异步方法的代码:

internal static void CheckIfSettingsExists()
{
    settingsContainer.Values["ApplicationXCurrentVersion"] = Controller.GetCurrentVersionAsync();
}

异步方法实现:

internal static async Task<string> GetCurrentVersionAsync()
{
    string temp = null;

    using HttpClient client = new HttpClient();

    try
    {
        temp = await client.GetStringAsync("https://someurl.cloud.io/api/v4/VersionCheck");
    }
    catch (Exception e)
    {
        App.log.Error("Error fetching version check json from API. Exception raised was: " + e.ToString());
        return temp;
    }
    App.log.Info("Successfully got return for VersionCheck");

    if (temp == null)
    {
        return temp;
    }

    dynamic JsonObj = JsonConvert.DeserializeObject<dynamic>(temp);

    return JsonObj["LatestVersion"].ToString();
}

异常原因

GetCurrentVersionAsync()是异步方法,返回类型为Task<string>,但你直接将这个Task对象赋值给了需要string类型的settingsContainer.Values条目——容器无法接受Task类型作为值,因此抛出System.ArgumentException: 'The parameter is incorrect.'。

这个异常发生在赋值操作阶段,完全不在GetCurrentVersionAsync内部的try/catch块覆盖范围内,所以你看不到异步方法里的catch逻辑触发。

修复方案

推荐方案:将调用方改为异步方法

这是异步编程的标准做法,避免阻塞线程:

internal static async Task CheckIfSettingsExists()
{
    // 使用await获取异步方法的实际返回值(string)
    settingsContainer.Values["ApplicationXCurrentVersion"] = await Controller.GetCurrentVersionAsync();
}

迫不得已的同步调用(不推荐)

如果必须保持CheckIfSettingsExists为同步方法,可以使用GetAwaiter().GetResult()获取结果(注意可能引发死锁风险,尤其是在UI线程或ASP.NET环境中):

internal static void CheckIfSettingsExists()
{
    settingsContainer.Values["ApplicationXCurrentVersion"] = Controller.GetCurrentVersionAsync().GetAwaiter().GetResult();
}

补充说明

异步方法的try/catch只能捕获方法内部执行时的异常(比如网络请求失败、JSON解析错误),但类型不匹配这类调用阶段的错误,需要在调用方的上下文处理。始终记得用await接收异步方法的返回结果,而不是直接操作Task对象。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 00:25:19