使用 Task.WhenAll 执行多个任务时 foo.Start() 出现错误

2023-12-28

我收到此错误“可能无法在承诺式任务上调用 Start”。所以我注释掉了.Start()。我再次尝试并收到此错误“可能无法在已完成的任务上调用启动”。那么我应该怎么做才能使其正常工作呢?

                var dashboardDailyAgeAnalysis = DailyAgeAnalysesTotalRowsCountAsync(v.BookItOutAccountId, v.ClientMgntAccountNumber, yesterdayDate);
                var dashboardDailyBalance = DailyBalanceTotalRowsCountAsync(v.BookItOutAccountId, v.ClientMgntAccountNumber, yesterdayDate);
                var dashboardDailyInventory = DailyInventoryTotalRowsCountAsync(v.BookItOutAccountId, v.ClientMgntAccountNumber, yesterdayDate);

               // dashboardDailyAgeAnalysis.Start();
               // dashboardDailyBalance.Start();
               // dashboardDailyInventory.Start();

                await Task.WhenAll(
                    dashboardDailyAgeAnalysis, dashboardDailyBalance, dashboardDailyInventory
                );

                // Do something with these results.
                var result1 = dashboardDailyAgeAnalysis.Result;
                var result2 = dashboardDailyBalance.Result;
                var result3 = dashboardDailyInventory.Result;

假设你的 3 个方法返回Task<int>您可以保留最初的解决方案以供使用Task.WhenAll like:

int[] results = await Task.WhenAll(
    DailyAgeAnalysesTotalRowsCountAsync(v.BookItOutAccountId, v.ClientMgntAccountNumber, yesterdayDate),
    DailyBalanceTotalRowsCountAsync(v.BookItOutAccountId, v.ClientMgntAccountNumber, yesterdayDate),
    DailyInventoryTotalRowsCountAsync(v.BookItOutAccountId, v.ClientMgntAccountNumber, yesterdayDate)
);

With Task.WhenAll,您一定要等待所有任务完成,即使有一个任务抛出异常。因此,您可以使用单个 try/catch 块。如果多个任务失败,AggregateException被提出。

与连续3次不一样await。使用连续等待,如果第一个任务失败,则不会等待后续任务,并且不会观察到它们的异常。即使您捕获了第一个异常,稍后也可能会引发其他异常并使您的程序崩溃。您将需要 3 个不同的 try/catch 块。

注意:现在未观察到的异常不会使您的程序崩溃,阅读以获取更多信息 https://devblogs.microsoft.com/pfxteam/task-exception-handling-in-net-4-5/在代码示例之后有 2 个连续的等待。解释得很好。

为了让开发者更方便的编写基于的异步代码 任务,.NET 4.5 更改了未观察到的默认异常行为 例外情况。虽然未观察到的异常仍会导致 要引发 UnobservedTaskException 事件(不这样做将是 重大更改),默认情况下该进程不会崩溃。

[...] 请注意,此更改并不意味着开发人员应该粗心 忽略未处理的异常......这只是意味着运行时间有点长 比以前更加宽容。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Task.WhenAll 执行多个任务时 foo.Start() 出现错误 的相关文章

  • 动态加载程序集的应用程序配置

    我正在尝试将模块动态加载到我的应用程序中 但我想为每个模块指定单独的 app config 文件 假设我的主应用程序有以下 app config 设置
  • 在结构中使用 typedef 枚举并避免类型混合警告

    我正在使用 C99 我的编译器是 IAR Embedded workbench 但我认为这个问题对于其他一些编译器也有效 我有一个 typedef 枚举 其中包含一些项目 并且我向该新类型的结构添加了一个元素 typedef enum fo
  • 秒表有最长运行时间吗?

    多久可以Stopwatch在 NET 中运行 如果达到该限制 它会回绕到负数还是从 0 重新开始 Stopwatch Elapsed返回一个TimeSpan From MSDN https learn microsoft com en us
  • 在哪里可以找到列出 SSE 内在函数操作的官方参考资料?

    是否有官方参考列出了 GCC 的 SSE 内部函数的操作 即 头文件中的函数 除了 Intel 的 vol 2 PDF 手册外 还有一个在线内在指南 https www intel com content www us en docs in
  • 使用 Gradle 发送电子邮件

    我写了一个任务 实际上是从互联网复制的 它将电子邮件发送到给定的电子邮件 但是当我运行它时 我得到java lang ClassNotFoundException javax mail internet MimeMessage例外 我已经包
  • 嵌套接口:将 IDictionary> 转换为 IDictionary>?

    我认为投射一个相当简单IDictionary
  • 从Web API同步调用外部api

    我需要从我的 Web API 2 控制器调用外部 api 类似于此处的要求 使用 HttpClient 从 Web API 操作调用外部 HTTP 服务 https stackoverflow com questions 13222998
  • 在 ASP.NET 5 中使用 DI 调用构造函数时解决依赖关系

    Web 上似乎充斥着如何在 ASP NET 5 中使用 DI 的示例 但没有一个示例显示如何调用构造函数并解决依赖关系 以下只是众多案例之一 http social technet microsoft com wiki contents a
  • 创建链表而不将节点声明为指针

    我已经在谷歌和一些教科书上搜索了很长一段时间 我似乎无法理解为什么在构建链表时 节点需要是指针 例如 如果我有一个节点定义为 typedef struct Node int value struct Node next Node 为什么为了
  • 将多个表映射到实体框架中的单个实体类

    我正在开发一个旧数据库 该数据库有 2 个具有 1 1 关系的表 目前 我为每个定义的表定义了一种类型 1Test 1Result 我想将这些特定的表合并到一个类中 当前的类型如下所示 public class Result public
  • 如何设计以 char* 指针作为类成员变量的类?

    首先我想介绍一下我的情况 我写了一些类 将 char 指针作为私有类成员 而且这个项目有 GUI 所以当单击按钮时 某些函数可能会执行多次 这些类是设计的单班在项目中 但是其中的某些函数可以执行多次 然后我发现我的项目存在内存泄漏 所以我想
  • while 循环中的 scanf

    在这段代码中 scanf只工作一次 我究竟做错了什么 include
  • 如何在 C 中调用采用匿名结构的函数?

    如何在 C 中调用采用匿名结构的函数 比如这个函数 void func struct int x p printf i n p x 当提供原型的函数声明在范围内时 调用该函数的参数必须具有与原型中声明的类型兼容的类型 其中 兼容 具有标准定
  • 如何序列化/反序列化自定义数据集

    我有一个 winforms 应用程序 它使用强类型的自定义数据集来保存数据进行处理 它由数据库中的数据填充 我有一个用户控件 它接受任何自定义数据集并在数据网格中显示内容 这用于测试和调试 为了使控件可重用 我将自定义数据集视为普通的 Sy
  • 垃圾收集器是否在单独的进程中运行?

    垃圾收集器是否在单独的进程中启动 例如 如果我们尝试测量某段代码所花费的进程时间 并且在此期间垃圾收集器开始收集 它会在新进程上启动还是在同一进程中启动 它的工作原理如下吗 Code Process 1 gt Garbage Collect
  • Windows 窗体:如果文本太长,请添加新行到标签

    我正在使用 C 有时 从网络服务返回的文本 我在标签中显示 太长 并且会在表单边缘被截断 如果标签不适合表单 是否有一种简单的方法可以在标签中添加换行符 Thanks 如果您将标签设置为autosize 它会随着您输入的任何文本自动增长 为
  • 覆盖子类中的字段或属性

    我有一个抽象基类 我想声明一个字段或属性 该字段或属性在从该父类继承的每个类中具有不同的值 我想在基类中定义它 以便我可以在基类方法中引用它 例如覆盖 ToString 来表示 此对象的类型为 property field 我有三种方法可以
  • 如何在Xamarin中删除ViewTreeObserver?

    假设我需要获取并设置视图的高度 在 Android 中 众所周知 只有在绘制视图之后才能获取视图高度 如果您使用 Java 有很多答案 最著名的方法之一如下 取自这个答案 https stackoverflow com a 24035591
  • 如何防止用户控件表单在 C# 中处理键盘输入(箭头键)

    我的用户控件包含其他可以选择的控件 我想实现使用箭头键导航子控件的方法 问题是家长控制拦截箭头键并使用它来滚动其视图什么是我想避免的事情 我想自己解决控制内容的导航问题 我如何控制由箭头键引起的标准行为 提前致谢 MTH 这通常是通过重写
  • 使用.NET技术录制屏幕视频[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 有没有一种方法可以使用 NET 技术来录制屏幕 无论是桌面还是窗口 我的目标是免费的 我喜欢小型 低

随机推荐

  • 如何将“camelCase”转换为“Camel Case”?

    我一直在尝试获取 JavaScript 正则表达式命令来将类似的内容转换为 thisString into This String 但我得到的最接近的是替换一个字母 导致类似的结果 Thi String or This tring 有任何想
  • C++ 从文本文件读取到数组/字符串

    这是我到目前为止的代码 我需要做的是从两个不同的文本文件 Matrix A 和 Matrix B 中读取 我可以这样做 但是对于我读到的每个文本文件矩阵 它只会出现 1 0 0 所以基本上是第一行 矩阵 A 的整个文本文件实际上是 1 0
  • Typescript - 错误地推断“从不”

    这是一个基本用例 用 null 初始化变量 然后更改某些嵌套循环 函数中的值 let a number null null 1 forEach gt a 1 if a null a toFixed Error Property toFixe
  • RStudio:我可以弹出源窗格吗?

    我有一个双显示器 我希望可以弹出 源窗格 我在其中编辑代码 以便我可以在一个显示器中编辑代码并跟踪另一个显示器中的其他所有内容 有谁知道这是否可能 非常感谢您的帮助 此功能本周刚刚添加到 RStudio 您可以在我们的日常构建中尝试它 0
  • Java Setter 和构造函数混淆

    我对如何在Java中使用构造函数和setter有点困惑 请参阅下面的示例代码 public class Name private String name public void setName String name this name n
  • 拳击,已经成为过去式了吗?

    这样做有什么意义吗 public static void Write
  • 构建詹金斯缺失的历史

    我刚刚为我的项目设置了一个新的 Jenkins 实例 版本 2 19 4 但是 当我尝试生成多个构建进行测试时 我发现构建历史记录仅向我显示一个历史构建 升级之前 至少显示两个或更多 詹金斯中有一个地方可以设置应该显示的历史构建的数量吗 在
  • 我可以将 Google Places API 中的姓名、地址和纬度/经度存储在我自己的数据库中吗?

    Closed 这个问题是与编程或软件开发无关 help closed questions 目前不接受答案 Google Places 关于存储信息的术语可能有点令人困惑 我希望有人能提供一些说明 我想构建一个数据库并收集有关企业的独特数据
  • MSBuild 是否需要安装 Visual Studio?

    我正在使用 Atlassian Bamboo 设置构建服务器 MSBuild 包含在 NET 框架中 所以我相信我至少可以在没有 VS2010 的情况下很好地构建 NET 应用程序 我们主要使用 C 进行开发 我是否需要在构建服务器上安装
  • 异步函数何时实际返回待处理的承诺?

    我用谷歌搜索了这个问题很多次 但我看到这个问题的唯一答案是 异步函数总是返回一个承诺 但我没有找到任何可以回答这种情况何时真正发生的问题 是一进入异步函数还是一遇到第一个await关键词 我刚刚写了这段代码 async function m
  • 使用 JavaScript 平滑更改文本

    我正在制作一个登陆页面 其中的短语会随着选定的单词而不断变化 例如 设计更好的网站为客户制作 将切换第一个或最后一个单词成为 开发更好的网站为客户制作 然而 由于 开发 这个词比 设计 更大 因此文本的其余部分最终会被推来推去 而无法顺利过
  • 使用 cURL 测试 AWS API Gateway

    我确实有一个受 AWS IAM 授权保护的简单 AWS API Gateway 实施 我只想通过 cURL 从命令行进行测试 curl location request GET https
  • 在 WPF 中使用快速彩色文本框进行语法突出显示

    是否可以在 WPF 中使用快速彩色文本框进行语法突出显示 http www codeproject com Articles 161871 Fast Colored TextBox for syntax highlighting http
  • 在 Notepad++ 中智能突出显示时显示出现次数

    是否可以显示智能突出显示的单词出现的次数 我的意思是当你双击一个单词时 在 Matlab 中 例如通过让光标触摸单词并在工具栏中显示它来激活智能突出显示即刻例如说4 usages of weight found 搜索单词 短语将为您提供相同
  • jQuery 1.8 中的 pipeline() 和 then() 文档与现实

    更新 这个问题现在已经过时了 因为文档是准确且最新的 我一直在探索 jQuery Deferred Promise API 但我对两者之间的差异感到非常困惑pipe and then 在哲学上和 jQuery 文档中 我发现从 jQuery
  • 函数(d)和函数(d,i)之间的区别?

    Every D3js初学者我一定正在经历这个想法 我对此非常确定 我已经在这个东西上呆了几个小时了 但我不知道如何使用它 也不知道它是什么不同之处它们之间 function d return d function d i return d
  • 如何从栅格中提取其最高值位于多边形内的 xy 坐标?

    给出的是一个栅格以及一个 SpatialPolygonsDataframe 为了检索多边形区域内栅格的最高值 可以使用 raster extract 效果很好 如何另外获取多边形区域内栅格提取的最高值的坐标 create raster r
  • 如何使用 WebMatrix 连接到 SQL Server 数据库?

    我添加了一个连接 它显示在 其他连接 中 但我似乎无法引用它 var db Database Open MyNewConnection 抛出异常 Connection string MyNewConnection was not found
  • 在 Azure Function 中添加自定义遥测属性

    我有一个 Azure 函数 v2 其中数据通过 HTTP 主体以 JSON 形式传入 我想使用标准在 Application Insights 中记录一些 JSON 数据Trace and Request events 到目前为止我尝试过的
  • 使用 Task.WhenAll 执行多个任务时 foo.Start() 出现错误

    我收到此错误 可能无法在承诺式任务上调用 Start 所以我注释掉了 Start 我再次尝试并收到此错误 可能无法在已完成的任务上调用启动 那么我应该怎么做才能使其正常工作呢 var dashboardDailyAgeAnalysis Da