为什么异步Parallel.ForEach中的异常会使应用程序崩溃?

格兰特·H

如果在控制台应用程序中运行而不是将其抛出AggregateException并被外部捕获,以下的崩溃为什么会崩溃try/catch

await为了简洁起见,我已经简化了用例,但是在相关代码中,我的确确实在尝试执行一个值得期待Task的重要性。

var list = new List<string>() {"Error"};

        try
        {
            Parallel.ForEach(list, new ParallelOptions()
            {
                MaxDegreeOfParallelism = 8
            }, async listEntry =>
            {
                await Task.Delay(5000);
                throw new Exception("Exception");
            });
        }
        catch (Exception ex)
        {
            //never hits, the application crashes
        }

        Console.ReadLine();

我注意到以下内容不会导致应用程序失败,并且确实会捕获到异常,但是我不了解关于这两种上下文的根本不同之处的实际情况:

var list = new List<string>() {"Error"};

        try
        {
            Parallel.ForEach(list, new ParallelOptions()
            {
                MaxDegreeOfParallelism = 8
            }, listEntry =>
            {

                throw new Exception("Exception");
            });
        }
        catch (Exception ex)
        {
            //exception is caught, application continues
        }

        Console.ReadLine();
斯威克

正如评论中已经提到的,您不应该混合使用asyncParallel.ForEach,它们不能一起使用。

您所观察到的是其中的后果之一:lambda作为async void方法进行编译,并且当async void方法抛出异常,该异常将重新抛出,SynchronizationContext通常会导致应用程序崩溃。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

AsyncTask中未捕获的异常会使应用程序崩溃吗?

来自分类Dev

为什么在正则表达式中包含多个捕获组会使我的应用程序崩溃?

来自分类Dev

什么是_convertNSDictionaryToDictionary <A,B,其中...>(NSDictionary?)-> [A:B],为什么它会使我的应用程序崩溃?

来自分类Dev

什么是_convertNSDictionaryToDictionary <A,B,其中...>(NSDictionary?)-> [A:B],为什么它会使我的应用程序崩溃?

来自分类Dev

为什么做listview.setAdapter(_adapter)两次会使应用程序崩溃?

来自分类Dev

为什么小错误会使我的SproutCore应用程序崩溃?

来自分类Dev

为什么应用程序在此活动中崩溃?

来自分类Dev

为什么我的应用程序崩溃了?

来自分类Dev

为什么聊天应用程序必须是异步的?

来自分类Dev

为什么不对MVC应用程序中的所有操作使用异步?

来自分类Dev

代码Socket clientSocket = new Socket(); 在Android应用程序中崩溃。为什么?

来自分类Dev

为什么当我按下按钮在表中插入值时应用程序崩溃?

来自分类Dev

为什么我不能从异步代码中捕获异常?

来自分类Dev

为什么[[UINavigationBar外观] setTranslucent:NO]使我的应用程序崩溃?

来自分类Dev

为什么authorizeview role =“ admin”使我的应用程序崩溃?

来自分类Dev

为什么Dispatch无法正常工作并使应用程序崩溃

来自分类Dev

Android Intent使我的应用程序崩溃,为什么?

来自分类Dev

Android开发-为什么该应用程序崩溃?

来自分类Dev

为什么我的按钮使我的应用程序崩溃?

来自分类Dev

为什么我的QQuick应用程序在Ubuntu上崩溃?

来自分类Dev

为什么SendKeys.SendWait()使我的应用程序崩溃

来自分类Dev

为什么使用fscanf导致应用程序崩溃?

来自分类Dev

为什么我的应用程序在更改布局时崩溃?

来自分类Dev

为什么我的应用程序在执行按钮时崩溃?

来自分类Dev

React 错误处理 - 为什么应用程序崩溃?

来自分类Dev

为什么我应该将自己的错误/异常处理构建到 Webflux 应用程序中?

来自分类Dev

为什么异步/等待在我的ASP.net 5控制台应用程序中不起作用?

来自分类Dev

为什么我的redux应用程序不能在redux-thunk中缓存异步api调用?

来自分类Dev

为什么WinDbg作为C ++应用程序崩溃的默认应用程序打开?

Related 相关文章

  1. 1

    AsyncTask中未捕获的异常会使应用程序崩溃吗?

  2. 2

    为什么在正则表达式中包含多个捕获组会使我的应用程序崩溃?

  3. 3

    什么是_convertNSDictionaryToDictionary <A,B,其中...>(NSDictionary?)-> [A:B],为什么它会使我的应用程序崩溃?

  4. 4

    什么是_convertNSDictionaryToDictionary <A,B,其中...>(NSDictionary?)-> [A:B],为什么它会使我的应用程序崩溃?

  5. 5

    为什么做listview.setAdapter(_adapter)两次会使应用程序崩溃?

  6. 6

    为什么小错误会使我的SproutCore应用程序崩溃?

  7. 7

    为什么应用程序在此活动中崩溃?

  8. 8

    为什么我的应用程序崩溃了?

  9. 9

    为什么聊天应用程序必须是异步的?

  10. 10

    为什么不对MVC应用程序中的所有操作使用异步?

  11. 11

    代码Socket clientSocket = new Socket(); 在Android应用程序中崩溃。为什么?

  12. 12

    为什么当我按下按钮在表中插入值时应用程序崩溃?

  13. 13

    为什么我不能从异步代码中捕获异常?

  14. 14

    为什么[[UINavigationBar外观] setTranslucent:NO]使我的应用程序崩溃?

  15. 15

    为什么authorizeview role =“ admin”使我的应用程序崩溃?

  16. 16

    为什么Dispatch无法正常工作并使应用程序崩溃

  17. 17

    Android Intent使我的应用程序崩溃,为什么?

  18. 18

    Android开发-为什么该应用程序崩溃?

  19. 19

    为什么我的按钮使我的应用程序崩溃?

  20. 20

    为什么我的QQuick应用程序在Ubuntu上崩溃?

  21. 21

    为什么SendKeys.SendWait()使我的应用程序崩溃

  22. 22

    为什么使用fscanf导致应用程序崩溃?

  23. 23

    为什么我的应用程序在更改布局时崩溃?

  24. 24

    为什么我的应用程序在执行按钮时崩溃?

  25. 25

    React 错误处理 - 为什么应用程序崩溃?

  26. 26

    为什么我应该将自己的错误/异常处理构建到 Webflux 应用程序中?

  27. 27

    为什么异步/等待在我的ASP.net 5控制台应用程序中不起作用?

  28. 28

    为什么我的redux应用程序不能在redux-thunk中缓存异步api调用?

  29. 29

    为什么WinDbg作为C ++应用程序崩溃的默认应用程序打开?

热门标签

归档