如何链接独立的 C# 任务?

2024-01-18

假设我有两个独立的异步函数(我不控制)来创建任务对象:

Task A();
Task B();

以及其他一些非异步函数

void X();

如何构建一个按顺序执行所有这些任务并允许附加进一步的延续(将在 X 之后执行)的单个任务链?

如果我这样做:

Task Sequential()
{
   return A()
     .ContinueWith(t => { B(); })
     .ContinueWith(t => { X(); });
}

这不起作用,因为 B 将启动一个新的任务链。如果 B 需要很长时间才能完成,则 X 将首先执行(以及 Sequential 的调用者可能在返回的 Task 上继续执行的任何其他操作)。我需要 X 成为单个任务链中的最后一个元素,并将 B 任务作为其先例。

如果我这样做:

Task Sequential()
{
   return A()
     .ContinueWith(t => { B().ContinueWith(t => { X(); }); });
}

这只能部分解决问题,因为即使 A、B 和 X 现在将按顺序执行,但如果调用者执行 Sequential().ContinueWith,则该延续将与 B 和 X 并行执行,而不是在 X 之后执行。


有什么理由不使用await吗?例如,

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

如何链接独立的 C# 任务? 的相关文章

随机推荐

  • 无法连接到我自己的 MDF 文件。无法打开用户默认数据库。登录失败。用户登录失败...以及其他错误

    SQLSEXPRESS 服务正在运行 我有我前一段时间写的程序并且它有效 它是在 MS Visual Studio 中使用本地 MDF 文件编写的 如何从 Microsoft SQL Server Management Studio 编辑此
  • 为什么 Android 深层链接使我在 Whatsapp 上的链接在 Whatsapp 的应用程序内打开?

    我正在关注本教程 https developer android com training app links deep linking一步步在 Android 上进行深度链接 部分代码如下 基本上它会在我的应用程序的webview中打开u
  • 如何使用 R 中的 lm() 函数从回归中删除不显着的因子水平?

    当我在 R 中执行回归并使用类型因子时 它可以帮助我避免在数据中设置分类变量 但是如何从回归中删除不重要的因素以仅显示重要变量呢 例如 dependent lt c 1 10 independent1 lt as factor c d a
  • 初始化 dict 的首选语法是什么:大括号文字 {} 或 dict() 函数?

    我正在付出一些努力来学习Python 并且我正在密切关注常见的编码标准 这似乎是一个毫无意义的挑剔问题 但我在学习时努力关注最佳实践 这样我以后就不必改掉任何 坏 习惯 我看到两种初始化字典的常用方法 a a value another v
  • 带有水晶报告的 CSS

    我如何将 css 与水晶报表一起使用 没有用于编写 css 的表 我可以在哪里编写 css 用于自定义 CrystalReportViewer 控件的级联样式表 http msdn microsoft com en us library m
  • Bash 变量字符替换最终为空字符串或命令无效

    我正在编写一个 shell 脚本 通过 JQ 从 JSON 文件中检索变量内容 JSON 文件采用字符串格式 无论这是真实字符串还是数字 为了在 bash 脚本中检索变量 我做了类似的事情 my domain cat vagrant dat
  • 在 Clojure 中使用 multimethods 代替 cond 有什么好处?

    为什么 Clojure 中的多方法不应该简单地用 cond 表达式替换 在看了第 1 章中多种方法的简单示例后 我受到启发而提出了这个问题 拉斯 奥尔森 Russ Olsen 的书的 5 篇获取 Clojure 在回答类似问题时 Cloju
  • Javascript/jQuery:如何检测img是否完全下载?

    我需要做的就是将图像定位在其父 div 的中心 首先 我尝试了这个 document ready function image1 css top 50 left 50 margin top image1 height 2 px margin
  • 导航到另一个页面时保持网站网址不变?

    我希望我的网站地址栏在进入子页面时不要更改其地址 它应该显示我的index html 即使我进入 tosub 页面 就像我打开一样www xyz com我导航到它仍应显示的任何页面www xyz com 我听说这可以用 htaccess是否
  • php - 检测字符串中的 HTML 并用代码标签包装

    我在处理文本内容中的 HTML 时遇到了麻烦 我正在考虑一种方法来检测这些标签并将所有连续的标签包装在代码标签内 别包裹我 p Hello p div class text wrap me please div span class tit
  • 指针声明为常量和易失性

    在阅读时 我遇到了这种类型的声明和以下行 const volatile char p const volatile char 0x30 p 的值仅受外部条件的影响 我不明白外部条件是什么 还有这种类型的实际用途是什么宣言 The const
  • 支持泛型的 Java 动态代码生成

    有没有提供Java动态代码生成并且还支持泛型的工具 例如 Javassist 就是我需要的工具 但它不支持泛型 我编写了一个使用 Java 6 编译器 API 的小库 但据我所知它依赖于 JDK 有没有办法指定另一个编译器 或者只随我的应用
  • 软件评估 - 许可证 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 任何人都可以帮助我解决软件许可模块问题吗 我们创建了一个新应用程序 并希望发布我们工具的演示版本 30 天试用版 稍后我们需要完整版本 如
  • UITableViewCell 中的 AVPlayer.play() 会短暂阻塞 UI

    我正在尝试将内嵌视频添加到我的 UITableViewCells 如 Instagram Twitter Vine 等 我正在使用 AVPlayerController 和自定义单元通过本地视频文件测试 UI 请参阅下面的示例代码 我等待
  • 无法连接到atom.io 获取主题和包

    我相信我的工作代理阻止我向 Atom 添加主题和包 从首选项菜单中 我得到 获取特色包和主题失败 隐藏输出 tunneling socket could not be established cause 140499728967552 er
  • Scipy.Odr 多变量回归

    我想执行多维 ODRscipy odr 我读了 API 文档 它说多维是可能的 但我无法让它工作 我在互联网上找不到工作示例 而且 API 非常粗糙 没有给出如何继续的提示 这是我的 MWE import numpy as np impor
  • R 中的掩码方法

    这个问题 https stackoverflow com questions 30600958 using gather from tidyr changes my regression results 30638813特别是这个答案 ht
  • 谷歌地图矩形可编辑:如何锁定(固定)高度进行编辑

    我有一个谷歌地图 里面有一个可编辑 可移动和调整大小等的矩形 我正在寻找的是一种锁定矩形给定高度的方法 所以只有 宽度可以改变 您可以使用 JavaScript 中的bounds changed 事件来阻止矩形调整高度大小 这是一个工作的
  • COMPILE_FLAGS 和 COMPILE_OPTIONS 之间的区别

    有什么区别 COMPILE FLAGS 编译此目标源时使用的附加标志 and COMPILE OPTIONS 传递给编译器的选项列表 就最终的 VS2010 解决方案而言 这些命令产生相同的结果 target compile options
  • 如何链接独立的 C# 任务?

    假设我有两个独立的异步函数 我不控制 来创建任务对象 Task A Task B 以及其他一些非异步函数 void X 如何构建一个按顺序执行所有这些任务并允许附加进一步的延续 将在 X 之后执行 的单个任务链 如果我这样做 Task Se