顺序等待 VS 连续等待

2023-12-24

我想知道编写由两个(或多个)异步和依赖(第一个必须完成才能执行第二个)操作组成的异步代码的最佳/正确方法是什么。

异步/等待示例:

await RunFirstOperationAsync();
await RunSecondOperationAsync();

继续示例:

await RunFirstOperationAsync()
    .ContinueWith(t => RunSecondOperationAsync());

你想用await如果可以的话。

ContinueWith有很多问题。我在我的博客文章中简要描述了这一点why ContinueWith很危险 http://blog.stephencleary.com/2013/10/continuewith-is-dangerous-too.html,它建立在我之前的博客文章之上why StartNew很危险 http://blog.stephencleary.com/2013/08/startnew-is-dangerous.html(他们有许多相同的问题)。

尤其:

  • ContinueWith没有好的默认值TaskScheduler。默认的任务调度程序是TaskScheduler.Current (not TaskScheduler.Default),并继续当前SynchronizationContext如果需要,必须手工完成。
  • ContinueWith有非理想的默认值options https://msdn.microsoft.com/en-us/library/system.threading.tasks.taskcontinuationoptions(v=vs.110).aspx。对于异步代码,您需要DenyChildAttach and ExecuteSynchronously, 至少。
  • ContinueWith不理解异步延续,这通常需要额外的Unwrap调用以解决此限制。
  • ContinueWith对待它的CancellationToken以一种令人惊讶的方式争论。更多相关内容在这篇博文中 http://blog.stephencleary.com/2015/03/a-tour-of-task-part-9-delegate-tasks.html我的。

这些论点都总结在我的关于任务延续的博客文章 http://blog.stephencleary.com/2015/01/a-tour-of-task-part-7-continuations.html. await没有任何这些缺点。

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

顺序等待 VS 连续等待 的相关文章

  • 互斥体实现可以互换(独立于线程实现)

    所有互斥体实现最终都会调用相同的基本系统 硬件调用吗 这意味着它们可以互换吗 具体来说 如果我使用 gnu parallel算法 使用openmp 并且我想让他们称之为线程安全的类我可以使用boost mutex用于锁定 或者我必须编写自己
  • C# Dns.GetHostEntry 不返回连接到 WiFi 的移动设备的名称

    我有一个 C 中的 Windows 窗体应用程序 我试图获取列表中所有客户端的主机名 下面给出的是 ra00l 来自此链接的代码示例 GetHostEntry 非常慢 https stackoverflow com questions 99
  • ASP.NET:获取自 1970 年 1 月 1 日以来的毫秒数

    我有一个 ASP NET VB NET 日期 我试图获取自 1970 年 1 月 1 日以来的毫秒数 我尝试在 MSDN 中寻找方法 但找不到任何东西 有谁知道如何做到这一点 从 NET 4 6 开始 该方法ToUnixTimeMillis
  • 关于在 Windows 上使用 WiFi Direct Api?

    我目前正在开发一个应用程序 我需要在其中创建链接 阅读 无线网络连接 在桌面应用程序 在 Windows 10 上 和平板电脑 Android 但无关紧要 之间 工作流程 按钮 gt 如果需要提升权限 gt 创建类似托管网络的 WiFi 网
  • 单击 form2 上的按钮触发 form 1 中的方法

    我对 Windows 窗体很陌生 我想知道是否可以通过单击表单 2 中的按钮来触发表单 1 中的方法 我的表格 1 有一个组合框 我的 Form 2 有一个 保存 按钮 我想要实现的是 当用户单击表单 2 中的 保存 时 我需要检查表单 1
  • 如何防止 ASP.NET 站点的图像盗链?

    防止人们从我的托管 ASP NET 网站热链接到图像的最佳 最简单方法是什么 我不需要防止所有图像 资源被热链接 我只是想防止热链接到网站上的特定图像 资源 供参考 它托管在 GoDaddy com 上 因此 IIS 技巧可能不起作用 最简
  • 未定义的行为或误报

    我 基本上 在野外遇到过以下情况 x x 5 显然 它可以在早期版本的 gcc 下编译干净 在 gcc 4 5 1 下生成警告 据我所知 警告是由 Wsequence point 生成的 所以我的问题是 这是否违反了标准中关于在序列点之间操
  • 未经许可更改内存值

    我有一个二维数组 当我第一次打印数组的数据时 日期打印正确 但其他时候 array last i 的数据从 i 0 到 last 1 显然是一个逻辑错误 但我不明白原因 因为我复制并粘贴了 for 语句 那么 C 更改数据吗 I use g
  • PlaySound 可在 Visual Studio 中运行,但不能在独立 exe 中运行

    我正在尝试使用 Visual Studio 在 C 中播放 wav 文件 我将文件 my wav 放入项目目录中并使用代码 PlaySound TEXT my wav NULL SND FILENAME SND SYNC 我按下播放按钮 或
  • 如何使用 watin 中的 FileUploadDialogHandler 访问文件上传对话框

    我正在使用 IE8 和 watin 并尝试通过我的网页测试上传文件 我不能简单地使用 set 方法设置上传文件 例如 ie FileUpload Find ById someId Set C Desktop image jpg 因为上传文本
  • 上下文敏感与歧义

    我对上下文敏感性和歧义如何相互影响感到困惑 我认为正确的是 歧义 歧义语法会导致使用左推导或右推导构建多个解析树 所有可能的语法都是二义性的语言是二义性语言 例如 C 是一种不明确的语言 因为 x y 总是可以表示两个不同的事物 如下所述
  • 无需安装即可部署 Expression Encoder SDK

    我试图在使用 Microsoft Expression Encoder 3 SDK 时证明一个概念 我正在尝试将 SDK 部署到我的托管 Web 服务器 以了解更多关于它是否有效以及还需要安装什么的信息 我无法在服务器上进行任何操作 以下是
  • HttpWebRequest 在第二次调用时超时

    为什么以下代码在第二次 及后续 运行时超时 代码挂在 using Stream objStream request GetResponse GetResponseStream 然后引发 WebException 表示请求已超时 我已经尝试过
  • 为什么在setsid()之前fork()

    Why fork before setsid 守护进程 基本上 如果我想将一个进程与其控制终端分离并使其成为进程组领导者 我使用setsid 之前没有分叉就这样做是行不通的 Why 首先 setsid 将使您的进程成为进程组的领导者 但它也
  • 如果方法参数是 string 或 int,ASP.NET WebAPI 会抛出 404

    我对 ASP NET MVC4 WebAPI 做了一个非常简单的测试 发现了一些有趣的问题 当一个方法采用复杂类型时 它会起作用 但是当它采用 string 或 int 时 它将抛出 404 如给出的屏幕截图所示 AddProduct 可以
  • Server.MapPath - 给定的物理路径,预期的虚拟路径

    我正在使用这行代码 var files Directory GetFiles Server MapPath E ftproot sales 在文件夹中查找文件 但是我收到错误消息说 给定物理路径但虚拟路径 预期的 我对在 C 中使用 Sys
  • 如何在按钮单击时模拟按键 - Unity

    我对 Unity 中的脚本编写非常陌生 我正在尝试创建一个按钮 一旦单击它就需要模拟按下 F 键 要拾取一个项目 这是我当前的代码 在编写此代码之前我浏览了所有统一论坛 但找不到任何有效的东西 Code using System Colle
  • 将自定义 ValueProviderFactories 添加到 ASP.NET MVC3?

    我试图尝试将 Protobuf ValueProviderFactory 添加到 MVC3 以便我可以选择 MIME 类型并将原始数据反序列化为操作参数的对象 我还可以使用它来更改默认的 Json 序列化器 看着JsonValueProvi
  • 检查Windows控制台中是否按下了键[重复]

    这个问题在这里已经有答案了 可能的重复 C 控制台键盘事件 https stackoverflow com questions 2067893 c console keyboard events 我希望 Windows 控制台程序在按下某个
  • 防止在工厂方法之外实例化对象

    假设我有一个带有工厂方法的类 class A public static A newA Some code logging return new A 是否可以使用 a 来阻止此类对象的实例化new 那么工厂方法是创建对象实例的唯一方法吗 当

随机推荐

  • 如何在 Celery 中使用气流

    我是airflow和celery的新手 现在我已经完成了dag的绘制 但是我想在同一子网中的两台计算机上运行任务 我想知道如何修改airflow cfg 一些例子可能会更好 谢谢各位的解答orz The 气流文档 https airflow
  • 多个并发程序在同一哈希键上执行读/删除操作的 Redis 行为

    我有一个程序 program 1 基于 Jedis 写入 Redis HASH KEY 1 定期进行 我还有另一个程序 program 2 单独的 JVM 进程 定期执行 并在 Redis 事务中执行以下操作 Transaction tra
  • 指令执行过程中中断

    假设 CPU 正在运行一条汇编指令 例如 FOO将在几个时钟内执行 例如 10 个 执行过程中突然出现中断请求FOO并且处理器需要中断 它是否等到命令正确执行 或者FOO已中止并将重新启动 考虑到不同类型的中断优先级 它的行为是否有所不同
  • 如何在 IE9 删除样式属性值之前获取样式属性值

    我试图在 IE9 10 删除无效值之前获取 style 属性的值 到目前为止 我已经尝试了以下所有变体 0 attributes style 0 style 0 getAttribute style 但似乎如果我尝试设置一个无效值 我将无法
  • spring hibernate乐观锁问题

    这是我的存储库层 class RepositoryImpl implements Repository Override public Serializable saveOrUpdate Object obj return getSessi
  • Node.js 加密密钥和 iv 匹配 java SecretKeySpec / IvParameterSpec

    我正在尝试将 Java 简单 加密算法移植到 Node JS 我需要能够解密 加密从 Java 端加密 解密的内容 我被困在一开始 密码的初始化 在Java中 我得到了密钥SecretKeySpec 以及初始化向量IvParameterSp
  • 当 RabbitMQ 消费者崩溃时,获取的消息会发生什么情况?

    如果我有一个 RabbitMQ 消费者批量检索 100 条消息 但在将这些消息标记为已处理之前它就崩溃了 那么这些消息是否丢失了 我希望队列中的每条消息至少被处理一次 处理在确认消息之前崩溃的消费者的推荐方法是什么 RabbitMQ 是否以
  • 如何动态更改 clr-icon 自定义元素的形状?

    In the 清晰度图标文档 https vmware github io clarity icons how to use它们表明您可以使用 shape 属性来设置图标形状 如下所示
  • 自动添加和删除成员的聊天 API [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在和一个使用 telegram 应用程序发送足球比赛投注提示的人合作 他希望该群组是私有的 现在他
  • Docker如何共享资源

    我一直在研究 Docker 我从中了解到这个帖子 https stackoverflow com questions 16047306 how is docker io different from a normal virtual mac
  • Python 请求响应解码

    我使用 python requests 发送请求 然后打印响应 令我困惑的是响应中的中文字符类似于 u6570 u636e u8fd4 u56de u6210 u529f这是代码 coding utf 8 import requests u
  • 如何更改flutter包的java版本?

    我正在我的 flutter 项目的包中编辑 java 文件 但它是使用源 1 7 构建的 我该如何更改它 Flutter Channel dev 1 27 0 8 0 pre on Microsoft Windows Version 10
  • 使用 React 中的函数打开外部链接

    我正在尝试在 React 中创建一个按钮 该按钮打开指向谷歌地图网址的外部链接 我有一个函数询问用户的地理位置 一旦提供 就会将位置输入到 url 链接中 该链接获取从其地理位置到设定目的地的方向 但是 我正在努力让按钮首先运行该函数并在n
  • 测试协议与相关类型的一致性

    我有一个使用关联类型的协议 如下所示 protocol Populatable typealias T func populateWith object T 以及实现该协议的类 class DateRowType Populatable f
  • 如果我使用提供程序,如何在应用程序启动时调用方法?

    我想完成get请求服务器在启动时获取我的应用程序的数据 我阅读了几个描述如何在构建小部件后运行方法的主题 但所有这些都描述了当provider没有使用 我不确定在小部件内执行此请求是否是个好主意 我尝试了几种方法但没有成功 这是我的代码 v
  • vim中的相对数

    我注意到 vim 中关于相对数字的奇怪行为 set nu 1 2 3 4 5 6 设置相对编号 2 1 3 1 2 3 设置诺努 2 1 0 1 2 3 我问自己为什么有时我看到绝对当前行号 有时我看到 0 这是非常无用的 这种行为正常吗
  • HTTP 标头值中允许使用哪些字符?

    学习后HTTP 1 1标准 https www ietf org rfc rfc2616 txt 特别是第 31 页和相关内容 我得出的结论是任何 8 位八位字节都可以出现在 HTTP 标头值中 IE 代码在 0 255 范围内的任何字符
  • BouncyCastle .NET 自定义 TlsClient,适用于 Android 上运行的匿名 CipherSuite,但不适用于 Windows

    我可以访问一个使用 CipherSuite 的 java 应用程序TLS ECDH anon WITH AES 256 CBC SHA用于通信 不可能使用另一个 前段时间 我不得不用 C 编写一个 Xamarin 应用程序 它使用 Boun
  • Git 恢复错误消息?

    在尝试恢复我对 emacs d 文件夹的存储库所做的提交时 我收到以下消息 haziz haziz gt git revert 7fe3f error could not revert 7fe3f0b emacs d contents fr
  • 顺序等待 VS 连续等待

    我想知道编写由两个 或多个 异步和依赖 第一个必须完成才能执行第二个 操作组成的异步代码的最佳 正确方法是什么 异步 等待示例 await RunFirstOperationAsync await RunSecondOperationAsy