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

C# 在TPL任务中抛出错误的正确方法,以便VS2012不会抱怨,c#,exception,visual-studio-2012,task-parallel-library,C#,Exception,Visual Studio 2012,Task Parallel Library,我发现线程相似,但不相同,所以请原谅我,如果它是一个重复。如何在任务中正确地“抛出”错误。我有这段代码,当条件合适时,它会抛出错误,但VisualStudio抱怨它没有受到影响。但之后,一切都会正常运行,包括_LoadDataMappingFieldListError方法。我以为第一个连续剧就足够了,但似乎不行。我真的需要创建两个独立的任务吗?一个用于测试,另一个用于实际检索?似乎有点多余。代码如下: ........ if (dcMapping.SettingsComplete().IsNul

我发现线程相似,但不相同,所以请原谅我,如果它是一个重复。如何在任务中正确地“抛出”错误。我有这段代码,当条件合适时,它会抛出错误,但VisualStudio抱怨它没有受到影响。但之后,一切都会正常运行,包括_LoadDataMappingFieldListError方法。我以为第一个连续剧就足够了,但似乎不行。我真的需要创建两个独立的任务吗?一个用于测试,另一个用于实际检索?似乎有点多余。代码如下:

........
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());
}
........
。。。。。。。。
if(dcMapping.SettingsComplete().IsNullEmpty())
{
_TaskCanceller=新的CancellationTokenSource();
_TaskLoader=Task.Factory.StartNew(()=>
{
//设置指示灯,首先测试连接以确保其正常工作
IsLoadingDataMappingFieldList=true;
字符串test=dcMapping.TestConnection();
if(test.IsNotNullEmpty())
抛出新的DataConnectionException(test);//\u LoadDataMappingFieldListComplete((List)antecendant.Result,RemapFields),
_任务取消器。令牌,
TaskContinuationOptions.NotUnfault,
TaskScheduler.FromCurrentSynchronizationContext());
}
........

您很可能启用了“仅我的代码”选项。在这种情况下,它表示“仅您的代码”的异常未得到处理。异常由框架代码捕获,并存储在
任务中


一、 就个人而言,我建议关闭“仅我的代码”设置,因为它往往会带来更多的阻碍。

谢谢Matt。有趣的是,以前从未注意到该选项。似乎在VS2010中默认禁用了该选项。我刚刚升级到2012(最终),这解释了我认为的区别。