在TPL任务中抛出错误的正确方法,以便VS2012不会抱怨

本文关键字:以便 方法 VS2012 任务 TPL 出错 错误 | 更新日期: 2023-09-27 18:34:09

我发现线程相似但不相同,所以如果结果是重复的,请原谅我。 如何在任务中正确"抛出"错误。 我有这段代码,当条件合适时,它会抛出错误,但Visual Studio抱怨它是不处理的。 但之后一切都会按应有的方式执行,包括_LoadDataMappingFieldListError方法。 我以为第一个继续就足够了,但似乎不是。 我是否需要实际创建 2 个单独的任务 - 一个用于测试,另一个用于实际检索?似乎有点多余。 这是代码:

........
if (dcMapping.SettingsComplete().IsNullEmpty())
{
    _TaskCanceller = new CancellationTokenSource(); 
    _TaskLoader = Task<object>.Factory.StartNew(() =>
    {
        //Set the indicator and first test the connection to make sure it is working
        IsLoadingDataMappingFieldList = true;
        string test = dcMapping.TestConnection();
        if (test.IsNotNullEmpty())
            throw new DataConnectionException(test);  // <--THE THROW IN QUESTION
        return dcMapping.GetFieldNameList();          // <--VS BREAKS HERE SAYING THE ABOVE IS UNHANDLED
    });
    //If there is an error
    _TaskLoader.ContinueWith(
        antecendant => _LoadDataMappingFieldListError(antecendant.Exception),
        _TaskCanceller.Token,
        TaskContinuationOptions.OnlyOnFaulted,
        TaskScheduler.FromCurrentSynchronizationContext());
    //Set up receiving function
    _TaskLoader.ContinueWith(
        antecendant => _LoadDataMappingFieldListComplete((List<string>)antecendant.Result, RemapFields),
        _TaskCanceller.Token,
        TaskContinuationOptions.NotOnFaulted,
        TaskScheduler.FromCurrentSynchronizationContext());
}
........

在TPL任务中抛出错误的正确方法,以便VS2012不会抱怨

您很可能打开了"只是我的代码"选项。 在这种情况下,它表明异常未处理的,涉及"仅您的代码"。 该异常由框架代码捕获并存储在Task中。

就我个人而言,我建议关闭"仅我的代码"设置,因为它往往会妨碍而不是帮助。

相关文章: