在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());
}
........
您很可能打开了"只是我的代码"选项。 在这种情况下,它表明异常是未处理的,涉及"仅您的代码"。 该异常由框架代码捕获并存储在Task
中。
就我个人而言,我建议关闭"仅我的代码"设置,因为它往往会妨碍而不是帮助。