zoukankan      html  css  js  c++  java
  • 捕获Task.WhenALl返回的Task的Exception

    如果有一个任务抛出异常,则Task.WhenAll 会出错,并把这个异常放在返回的Task 中。
    如果多个任务抛出异常,则这些异常都会放在返回的Task 中。但是,如果这个Task 在被await 调用,就只会抛出其中的一个异常。如果要得到每个异常,可以检查Task.WhenALl返回的Task 的Exception 属性:

            static async Task ThrowNotImplementedExceptionAsync()
            {
                throw new NotImplementedException();
            }
            static async Task ThrowInvalidOperationExceptionAsync()
            {
                throw new InvalidOperationException();
            }
            static async Task ObserveOneExceptionAsync()
            {
                var task1 = ThrowNotImplementedExceptionAsync();
                var task2 = ThrowInvalidOperationExceptionAsync();
                try
                {
                    await Task.WhenAll(task1, task2);
                }
                catch (Exception ex)
                {
                    // ex 要么是NotImplementedException,要么是InvalidOperationException
    
                }
            }
    
            static async Task ObserveAllExceptionsAsync()
            {
                var task1 = ThrowNotImplementedExceptionAsync();
                var task2 = ThrowInvalidOperationExceptionAsync();
                Task allTasks = Task.WhenAll(task1, task2);
                try
                {
                    await allTasks;
                }
                catch
                {
                    AggregateException allExceptions = allTasks.Exception;
    
                }
            }

    使用Task.WhenAll 时,我一般不会检查所有的异常。通常情况下,只处理第一个错误就足够了,没必要处理全部错误。

  • 相关阅读:
    reids 入门
    关于字典的那些事儿.
    更新阿里源repo出的问题
    关于-编码进阶
    *** 数据类型之间的转化
    关于列表那些事:12.24
    while else 结构体(自测)
    关于切片的步长为正负值 的问题(自测)
    if 嵌套if 的先后顺序的区别 (自测)
    二: python基础数据类型(int,
  • 原文地址:https://www.cnblogs.com/xbzhu/p/7356720.html
Copyright © 2011-2022 走看看