标签: aggregateexception

如何修复mscorlib.dll中出现"'System.AggregateException'"

我在调试器中遇到这样的问题,程序停止执行.调试器没有显示该行,所以我不知道要修复什么.

mscorlib.dll中发生了未处理的"System.AggregateException"类型异常

附加信息:通过等待任务或访问其Exception属性未观察到任务的异常.结果,终结器线程重新抛出了未观察到的异常.

无法获得本地或参数''的值,因为它在此指令指针处不可用,可能是因为它已经被优化掉了.System.Threading.Tasks.TaskExceptionHolder

如何解决我的问题?

我还发现这个非常相似的问题无法获得本地或参数的值,因为它在此指令指针处不可用,可能是因为它已被优化掉了

.net c# exception aggregateexception

44
推荐指数
2
解决办法
15万
查看次数

展平处理的AggregateExceptions

我遇到了几个我打电话的问题,但里面还有flatten另一个问题!这显然意味着它们正在链中传播并被卷入另一个链中.有没有办法递归展平所有内部AggregateExceptions?通常,我将使用句柄委托处理这些,但如果有另一个内部AggregateExceeption,则返回false.我没有妥善处理这些问题吗?AggregateExceptionAggregateExceptionAggregateException

编辑:既然我已经打电话展平,看来问题是,它没有被抓住,直到后来方式在调用堆栈.这是我正在调用Flatten()的代码.要在堆栈跟踪中使用,此方法称为WriteExceptionRecord(string,FileInfo):

do
{
    try
    {
        using (var stream = file.Open(FileMode.Append, FileAccess.Write, FileShare.None))
        {
            using (StreamWriter writer = new StreamWriter(stream))
            {
                await writer.WriteLineAsync(data);
            }
        }
    }
    catch (AggregateException ex)
    {
        ex.Flatten().Handle((x) =>
        {
            if (x is IOException)
            {
                retryNeeded = true;
                retryLeft--;
                Thread.Sleep(500);
                return true;
            }

            logger.ErrorException("Could not write to exception file: " + data, ex);
            return false;
        });
    }
}
while (retryNeeded && retryLeft > 0);
Run Code Online (Sandbox Code Playgroud)

但是,堆栈跟踪显示它没有被捕获.相反,它会在调用堆栈之后被捕获.以下是出于安全原因删除了一些识别信息的跟踪:

System.AggregateException: One or more errors occurred. ---> …
Run Code Online (Sandbox Code Playgroud)

c# exception task-parallel-library aggregateexception

21
推荐指数
3
解决办法
2万
查看次数

HttpClient - 处理聚合异常

您好我正在使用类似这样的HttpClient:

public static Task<string> AsyncStringRequest(string url, string contentType)
{
    try
    {
        var client = new HttpClient();
        client.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue(contentType));

        return client.GetStringAsync(url).ContinueWith(task => {
            return task.Result;
        });
    }
    catch (AggregateException ex)
    {
        throw ex;
    }
    catch (WebException ex)
    {
        throw ex;
    }       
    catch (Exception ex)
    {
        throw ex;
    }
}
Run Code Online (Sandbox Code Playgroud)

但我处理异常时遇到困难.我添加了额外的catch块只是为了尝试并逐步抛出,但没有任何断点被捕获到任何catch块中.我意识到使用Task,异常可能发生在与调用者不同的线程上,因此异常包含在聚合容器中,但我不确定处理这些异常的最佳方法是什么.

例如,我向Web服务发出请求,并在请求中指定了特定的无效参数,并抛出异常.我希望我能够捕获聚合异常,并查看innerexceptions以找出请求失败的原因并返回友好消息.

所以我的问题是,捕获这些聚合异常并处理它们的最佳方法是什么?

c# rest exception-handling httpclient aggregateexception

12
推荐指数
1
解决办法
2万
查看次数

AggregateExpression中的C#InnerException

我有如下代码来捕获使用TaskFactory和Task.Run创建的任务抛出异常.如果我使用TaskFactory,我可以检查继续任务中从上一个任务抛出的异常,而不必使用Task.WaitAll方法.如果我使用Task.Run,​​则除非我明确等待子任务完成,否则将不会执行Continued任务.TaskFactory.StartNew中的哪个标志改变了这种行为?

另外,AggregateException类中的InnerException和InnerExceptions有什么区别?InnerExceptions返回一个由子任务抛出的所有异常的只读集合.InnerException返回仅由一个子任务抛出的异常的AggregateExcpetion.

//Use Factory
TaskCreationOptions atp = TaskCreationOptions.AttachedToParent;
Task.Factory.StartNew(() =>
{
    Task.Factory.StartNew (() => { throw null; }, atp);
    Task.Factory.StartNew (() => { throw new NullReferenceException();}, atp);
    Task.Factory.StartNew (() => { throw new Exception("Test"); }, atp);
})
.ContinueWith (p => p.Exception.Dump(),TaskContinuationOptions.OnlyOnFaulted);

//Use Task.Run
Task.Run(()=>
{
    TaskCreationOptions op = TaskCreationOptions.AttachedToParent;
    var t1 = Task.Factory.StartNew(()=> {throw null;}, op);
    var t2 = Task.Factory.StartNew(()=> {throw new NullReferenceException();}, op);
    var t3 = Task.Factory.StartNew(()=> {throw new Exception("Test");}, op);

    //This will trigger the continued task
    //Task.WaitAll(new Task[]{t1,t2,t3}); …
Run Code Online (Sandbox Code Playgroud)

c# aggregateexception

7
推荐指数
1
解决办法
4303
查看次数

AggregateException中的TaskCanceledException不包含堆栈跟踪

我正在使用任务并行库来运行一个任务 - 当取消时 - 抛出OperationCanceledException,然后使用AggregateException捕获它,如下所示.AggregateException包含TaskCanceledExceptions列表,它对应于抛出的异常.不幸的是,这些TaskCanceledExceptions似乎正在丢失原始异常抛出的堆栈跟踪.这是设计的吗?

try
{
    task1.Wait();
}
catch (AggregateException aggEx)
{
    var tcex = ex as TaskCanceledException;
    if (tcex != null)
    {
        Debug.WriteLine("InnerException:{0}, Message:{1}, Source:{2}, StackTrace: {3}",
            tcex.InnerException, tcex.Message, tcex.Source, tcex.StackTrace);

        return true;
    }
    else
    {
        return false;
    }
}
Run Code Online (Sandbox Code Playgroud)

结果:

InnerException:, Message:A task was canceled., Source:, StackTrace: 
Run Code Online (Sandbox Code Playgroud)

c# .net-4.0 task-parallel-library cancellation aggregateexception

6
推荐指数
1
解决办法
2371
查看次数

Wrapped AggregateException仅报告ToString方法中的第一个异常

当我直接使用ToString()method 时,我得到完整的嵌套异常集AggregateException:

public void GreenTest()
{
    var ex = new AggregateException(new Exception("ex1"), new Exception("ex2"));

    ex.ToString()
        .Should()
        .Contain("ex1")
        .And
        .Contain("ex2");
}
Run Code Online (Sandbox Code Playgroud)

问题是当我被AggregateException另一个异常包装时,我只得到第一个异常:

public void RedTest()
{
    var ex = new Exception("wrapper", new AggregateException(new Exception("ex1"), new Exception("ex2")));

    ex.ToString()
        .Should()
        .Contain("wrapper")
        .And
        .Contain("ex1")
        .And
        .Contain("ex2");
}
Run Code Online (Sandbox Code Playgroud)

ex2在结果字符串中不存在.这是一个错误或类的一些众所周知的功能AggregateException

c# aggregateexception

6
推荐指数
1
解决办法
687
查看次数

对 AggregateException Handle 方法的混淆

ReSharper 给了我一个 CoVariantConversion 警告,所以我决定谷歌一下,看看如何解决它。我遇到了这段代码:

 // ReSharper disable CoVariantArrayConversion
 try
 {
    Task.WaitAll(taskList.ToArray());
 }
 catch (AggregateException ex)
 {
    ex.Handle(e => true);
 }
 // ReSharper restore CoVariantArrayConversion
Run Code Online (Sandbox Code Playgroud)

这部分让我感到困惑:

 ex.Handle(e => true);
Run Code Online (Sandbox Code Playgroud)

它有什么作用?我会认为它什么都不做。

c# resharper lambda task-parallel-library aggregateexception

5
推荐指数
2
解决办法
4570
查看次数

PLINQ例外

我正在使用PLINQ,代码如下:

static void Main(string[] args)
    {
        var lt = new List<int>() {1,2,3,4,5};
        try
        {
            var nlt = lt.AsParallel().Select(Test).ToList();
        }
        catch (AggregateException e)
        {
            foreach (var ex in e.InnerExceptions)
            {
                Console.WriteLine(ex.Message);
            }
        }

    }

    private static bool Test(int n)
    {
        if (n == 1)
        {
            Thread.Sleep(1000);
        }
        if (n == 3)
        {
            Thread.Sleep(3000);
        }
        if (n == 5)
        {
            Thread.Sleep(5000);
        }
        if (n == 2 || n == 4)
        {
            throw new Exception("New exception");
        }
        Console.WriteLine("element : {0}", n);
        return true; …
Run Code Online (Sandbox Code Playgroud)

.net c# plinq aggregateexception

3
推荐指数
1
解决办法
426
查看次数

Task.WaitAll Index Out of Bounds Exception Cause

为什么这不完整?相反,它抛出一个异常,就像没有捕获异常一样.而且,"索引超出数组范围"的例外对我来说没有意义.

        int n = 3;
        string[] names = new string[] { "sally", "fred", "gina" };
        Task[] myTasks = new Task[n];
        for (int y = 0; y < n; y++)
        {
            myTasks[y] = Task.Factory.StartNew(() =>
            {
                Action<string> action = (name) =>
                {
                    try
                    {
                        throw new Exception(name + ", I bet you can't catch me.");
                    }
                    catch (Exception e)
                    {
                        //I caught you... didn't I?
                    }
                };
                action(names[y]);
            });
        }

        Task.WaitAll(myTasks);
        Console.WriteLine("All tasks complete.");//This line is never reached;
Run Code Online (Sandbox Code Playgroud)

c# task aggregateexception

2
推荐指数
1
解决办法
1225
查看次数

使用Tasks,Handle AggregateException保持UI响应

如果我的WinForms应用程序启动任务以在执行任务时保持响应,我在处理AggregateException时会遇到问题。

简化的情况如下。假设我的Form有一个相当慢的方法,例如:

private double SlowDivision(double a, double b)
{
    System.Threading.Thread.Sleep(TimeSpan.FromSeconds(5));
    if (b==0) throw new ArgumentException("b");
    return a / b;
}
Run Code Online (Sandbox Code Playgroud)

按下按钮后,我希望我的表单显示SlowDivision(3,4)的结果。以下代码会将用户界面挂起一段时间:

private void button1_Click(object sender, EventArgs e)
{
    this.label1.Text = this.SlowDivision(3, 4).ToString();
}
Run Code Online (Sandbox Code Playgroud)

因此,我想开始执行处理任务。该任务完成后,应继续执行将显示结果的操作。为了防止InvalidOperationException,我需要确保从创建标签的线程访问label1,因此需要Control.Invoke:

private void button1_Click(object sender, EventArgs e)
{
    Task.Factory.StartNew ( () =>
    {
        return this.SlowDivision(3, 4);
    })
    .ContinueWith( (t) =>
    {
        this.Invoke( new MethodInvoker(() => 
        {
            this.label1.Text = t.Result.ToString();
        }));
    });
}
Run Code Online (Sandbox Code Playgroud)

到目前为止,一切都很好,但是如何处理异常,例如,如果我想计算SlowDivision(3,0)?

通常,如果任务抛出未处理的异常,它将通过AggregateException转发到等待线程。许多示例显示以下代码:

var myTask = Task.Factory.StartNew ( () => ...);
try
{
    myTask.Wait();
}
catch …
Run Code Online (Sandbox Code Playgroud)

c# multithreading task aggregateexception

2
推荐指数
1
解决办法
1252
查看次数

未处理的聚合异常

我已按照(http://www.c-sharpcorner.com/UploadFile/a6fd36/understand-self-host-of-a-web-apiC-Sharp/)和(http://www.c- Sharpcorner.com/uploadfile/a6fd36/understanding-how-to-call-the-web-api-from-a-client-applica/)但似乎仍然出现 System.AggregateException

                 //Call HttpClient.GetAsync to send a GET request to the appropriate URI   
            HttpResponseMessage resp = client.GetAsync("api/books").Result;
Run Code Online (Sandbox Code Playgroud)

                var resp = client.GetAsync(string.Format("api/books/{0}", id)).Result;
Run Code Online (Sandbox Code Playgroud)

                var resp = client.GetAsync(query).Result;
Run Code Online (Sandbox Code Playgroud)

错误指出: mscorlib.dll 中发生了类型为“System.AggregateException”的未处理异常

异常详细信息 -

  System.AggregateException was unhandled
  HResult=-2146233088
   Message=One or more errors occurred.
   Source=mscorlib
  StackTrace:
   at System.Threading.Tasks.Task.ThrowIfExceptional(Boolean includeTaskCanceledExceptions)
   at System.Threading.Tasks.Task`1.GetResultCore(Boolean waitCompletionNotification)
   at System.Threading.Tasks.Task`1.get_Result()
   at TestClient.Program.ListAllBooks() in c:\Users\wa\Documents\Visual Studio 2013\Projects\SelfHost\TestClient\Program.cs:line 35
   at TestClient.Program.Main(String[] args) in c:\Users\wa\Documents\Visual Studio 2013\Projects\SelfHost\TestClient\Program.cs:line 20
   at System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args)
   at System.AppDomain.ExecuteAssembly(String assemblyFile, …
Run Code Online (Sandbox Code Playgroud)

c# exception unhandled-exception aggregateexception

-3
推荐指数
1
解决办法
1万
查看次数