避免异步在方法签名中传播

2023-12-05

阻止我在 .net 代码中不断使用异步/等待模式的原因是,一旦创建异步方法,async 关键字就会在我的代码中传播,迫使我使所有方法异步。有没有一种模式可以有效地阻止这种情况?


阻止我在 .net 代码中不断使用异步/等待模式的原因是,一旦创建异步方法,async 关键字就会在我的代码中传播,迫使我使所有方法异步。有没有一种模式可以有效地阻止这种情况?

那么让我问你这个问题:你为什么使用async/await?您需要退后一步,决定是否想要异步代码的好处。如果您确实想要这些好处,那么您的代码必须是异步的。一旦你阻塞了一个线程,你就失去了异步的所有好处。那么实际上,如果您只是要阻塞线程,为什么还要使用异步代码呢?

也就是说,在某些情况下,部分 -async堆栈是有道理的。例如,如果您的代码库是暂时地处于过渡状态。在这种情况下,您可以使用我的文章中描述的一种技巧棕地异步:

  • 直接阻塞(可能会导致死锁)。
  • 阻塞线程池线程(在不同线程和不同上下文上执行代码,可能会导致意外的并行性)。
  • 使用线程池上下文阻塞当前线程(在不同的上下文中执行代码,可能会导致意外的并行性)。
  • 阻塞具有单线程上下文的线程(在不同线程和不同上下文上执行代码)。
  • 阻塞嵌套消息循环(可能会导致意外重入)。

所有这些都是黑客行为,并且都有不同的缺点。没有一种方法可以适用于所有情况。

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

避免异步在方法签名中传播 的相关文章

  • 在一个数据访问层中处理多个连接字符串

    我有一个有趣的困境 我目前有一个数据访问层 它必须与多个域一起使用 并且每个域都有多个数据库存储库 具体取决于所调用的存储过程 目前 我只需使用 SWITCH 语句来确定应用程序正在运行的计算机 并从 Web config 返回适当的连接字
  • 类型中的属性名称必须是唯一的

    我正在使用 Entity Framework 5 并且有以下实体 public class User public Int32 Id get set public String Username get set public virtual
  • 如何在 Cassandra 中存储无符号整数?

    我通过 Datastax 驱动程序在 Cassandra 中存储一些数据 并且需要存储无符号 16 位和 32 位整数 对于无符号 16 位整数 我可以轻松地将它们存储为有符号 32 位整数 并根据需要进行转换 然而 对于无符号 64 位整
  • 机器Epsilon精度差异

    我正在尝试计算 C 中双精度数和浮点数的机器 epsilon 值 作为学校作业的一部分 我在 Windows 7 64 位中使用 Cygwin 代码如下 include
  • C++11 删除重写方法

    Preface 这是一个关于最佳实践的问题 涉及 C 11 中引入的删除运算符的新含义 当应用于覆盖继承父类的虚拟方法的子类时 背景 根据标准 引用的第一个用例是明确禁止调用某些类型的函数 否则转换将是隐式的 例如最新版本第 8 4 3 节
  • 随着时间的推移,添加到 List 变得非常慢

    我正在解析一个大约有 1000 行的 html 表 我从一个字符串中添加 10 个字符串 td 每行到一个list td
  • 为什么 GCC 不允许我创建“内联静态 std::stringstream”?

    我将直接前往 MCVE include
  • 如何从本机 C(++) DLL 调用 .NET (C#) 代码?

    我有一个 C app exe 和一个 C my dll my dll NET 项目链接到本机 C DLL mynat dll 外部 C DLL 接口 并且从 C 调用 C DLL 可以正常工作 通过使用 DllImport mynat dl
  • 如何连接重叠的圆圈?

    我想在视觉上连接两个重叠的圆圈 以便 becomes 我已经有部分圆的方法 但现在我需要知道每个圆的重叠角度有多大 但我不知道该怎么做 有人有主意吗 Phi ArcTan Sqrt 4 R 2 d 2 d HTH Edit 对于两个不同的半
  • 如何在 C++ 中标记字符串?

    Java有一个方便的分割方法 String str The quick brown fox String results str split 在 C 中是否有一种简单的方法可以做到这一点 The 增强分词器 http www boost o
  • 对类 static constexpr 结构的未定义引用,g++ 与 clang

    这是我的代码 a cp p struct int2 int x y struct Foo static constexpr int bar1 1 static constexpr int2 bar2 1 2 int foo1 return
  • C++ 多行字符串原始文字[重复]

    这个问题在这里已经有答案了 我们可以像这样定义一个多行字符串 const char text1 part 1 part 2 part 3 part 4 const char text2 part 1 part 2 part 3 part 4
  • 人脸 API DetectAsync 错误

    我想创建一个简单的程序来使用 Microsoft Azure Face API 和 Visual Studio 2015 检测人脸 遵循 https social technet microsoft com wiki contents ar
  • C# - 当代表执行异步任务时,我仍然需要 System.Threading 吗?

    由于我可以使用委托执行异步操作 我怀疑在我的应用程序中使用 System Threading 的机会很小 是否存在我无法避免 System Threading 的基本情况 只是我正处于学习阶段 例子 class Program public
  • 为什么这个字符串用AesCryptoServiceProvider第二次解密时不相等?

    我在 C VS2012 NET 4 5 中的文本加密和解密方面遇到问题 具体来说 当我加密并随后解密字符串时 输出与输入不同 然而 奇怪的是 如果我复制加密的输出并将其硬编码为字符串文字 解密就会起作用 以下代码示例说明了该问题 我究竟做错
  • 空指针与 int 等价

    Bjarne 在 C 编程语言 中写道 空指针与整数零不同 但 0 可以用作空指针的指针初始值设定项 这是否意味着 void voidPointer 0 int zero 0 int castPointer reinterpret cast
  • 有没有办法让 doxygen 自动处理未记录的 C 代码?

    通常它会忽略未记录的 C 文件 但我想测试 Callgraph 功能 例如 您知道在不更改 C 文件的情况下解决此问题的方法吗 设置变量EXTRACT ALL YES在你的 Doxyfile 中
  • C# 中的 IPC 机制 - 用法和最佳实践

    不久前我在 Win32 代码中使用了 IPC 临界区 事件和信号量 NET环境下场景如何 是否有任何教程解释所有可用选项以及何时使用以及为什么 微软最近在IPC方面的东西是Windows 通信基础 http en wikipedia org
  • C# 中最小化字符串长度

    我想减少字符串的长度 喜欢 这串 string foo Lorem ipsum dolor sit amet consectetur adipiscing elit Aenean in vehicula nulla Phasellus li
  • C++ 中的参考文献

    我偶尔会在 StackOverflow 上看到代码 询问一些涉及函数的重载歧义 例如 void foo int param 我的问题是 为什么会出现这种情况 或者更确切地说 你什么时候会有 对参考的参考 这与普通的旧参考有何不同 我从未在现

随机推荐

  • 使用 LINQtoSQL 获取随机行

    有没有办法使用 LINQToSQL 从表中返回随机行 是的 在表的计数范围内生成一个随机数 然后 Skip 该数字 Take 1 然后返回结果序列的第一个元素 就像是 var R new Random var ToSkip R Next 0
  • 从 Python 运行 shell 命令并实时打印输出

    我想编写一个函数 一次执行多个 shell 命令并实时打印 shell 返回的内容 我目前有以下不打印 shell 的代码 我使用的是 Windows 10 和 python 3 6 2 commands foo foofoo p subp
  • ReferenceError:描述未定义 NodeJs

    我正在尝试定义一些端点并使用进行测试nodejs In server js I have var express require express var func1 require func1 js var port 8080 var se
  • 将具有多个 from 的 linq 查询表达式转换为扩展方法语法 [重复]

    这个问题在这里已经有答案了 我无法将此代码转换为扩展方法语法 var query from c in context Customers from o in c Orders where o DateSent null select new
  • Sql Server 2008 地理 LineString 大小限制

    今天我遇到了地理类型可能的大小限制Linestrings在 Sql Server 2008 中 当我创建一个线串时STGeomFromText 包含 567 个点 其中包含长 纬度和 Z 坐标 一切正常 但是 如果我向线串再添加一个点 我会
  • 命名管道上的 WriteFile 有时会返回 ERROR_NO_DATA

    我有一个 C 程序 它正在创建一个命名管道来写入数据 有客户反映了客户端连接命名管道但服务器端写入数据失败的情况 用ERROR NO DATA 我能找到的任何 MSDN 页面都没有真正解释此错误代码 有人对如何解决这个问题有任何想法吗 或者
  • Spring Security 更新身份验证成功后的上次登录日期

    如何在身份验证成功时触发我的方法 我想更新我的数据库列 上次登录日期 在谷歌上查了一下 但仍然不明白应该如何完成 这是我的 spring security xml
  • 在.NET中使用PEM编码的RSA私钥

    我有一个私钥 如下所示 开始 RSA 私钥 一些私钥数据 结束 RSA PRIVA 我需要在我的 C 项目中使用此密钥 但我找不到任何如何使用此格式的密钥的示例 谢谢 步骤 1 获取 一些私钥数据 content remove BEGIN
  • 验证 ADF 移动应用程序中的用户名和密码

    我正在 adf 移动应用程序中开发一个简单的登录页面 以下是现在登录 amx 页面中的一段代码
  • SQL trunc/group/order by 日期(日/月/季度/年),总和跳过日期,没有数据

    我参与了一个需要按日期构建直方图的项目 在我之前 这是通过 Java 代码对每个矩形 日期子区域 对数据库进行大量 SQL 查询来完成的 我尝试另一种方法 select sum CNT trunc DATE MM from DATA whe
  • 在 Windows 上,mkbundle 因链接器错误而失败

    我正在尝试构建一个需要在可能未安装 NET 的环境中运行的控制台实用程序 Mono 的 mkbundle 似乎是解决这个问题的一个很好的解决方案 但是当在 Windows 10 上通过 cygwin 在一个简单的项目上运行 mkbundle
  • 使用任意 QML 项目作为缓存图像源

    编辑 原来的问题仍然包含在下面 但我决定重新命名为一个表单 该表单在各种情况下对开发人员更有用 其中一些在我的回答中描述 因为原始问题的解决方案变成了提供更广泛的应用领域 我有一组应用程序的灰度图标 并且要求用户可以更改图标颜色 因此 显而
  • 在 Firebird 的服务器端使用生成器值时,如何不浪费它们?

    检查这段简单的代码 它使用生成器在 Firebird 表中创建唯一的主键 CREATE OR ALTER TRIGGER ON BEFOREINSERT PK BOOKING ITEM FOR BOOKING ITEM BEFORE INS
  • 访问隐藏在第三个扩展类中的间接超类变量

    假设我有如下代码 class A int a 1 class B extends A int a 2 class C extends B int a 3 void print it int a 4 Local variable a to t
  • .NET - 函数变量存储在地址空间的堆或堆栈上?

    我在一次考试中遇到了如下问题 当程序调用函数时 其中的数据结构类型是 为该函数中的变量分配的内存 HEAP QUEUE LIFO STACK 根据测试 HEAP是正确答案 虽然我选择了STACK 有很棒的人可以解释一下为什么吗 提前致谢 首
  • CSS - 具有等边距和固定大小块的响应式网格

    我正在尝试突破 CSS 的限制 以复制印刷中常见的网格布局 要求 块之间以及块与容器边缘之间的边距必须相等 布局必须具有响应性 并且每行上的块数必须适应窗口的大小 最后一行必须左对齐 块的宽度 高度是固定的 不使用空的非语义 HTML 元素
  • 使用 Powershell 将文件上传到 Sharepoint Online (Microsoft 365)(选项 1-使用 PnP.Powershell)

    我正在尝试将文件上传到 Sharepoint Online M365 库子文件夹中 但它不断出现错误 我尝试过很多脚本 这篇文章是关于使用 PnP Powershell 我已经发布了有关其他脚本的问题 希望有人可以帮助我解决其中任何一个问题
  • Spring 和 HTTP 选项请求

    作为对此的后续question 我想知道如何在 spring 3 mvc 应用程序中处理 OPTIONS 请求 我不想为我的 spring 代码中的每个端点编写选项处理方法 但是建议的选项处理程序到 的映射仅适用于还没有处理程序的端点 所以
  • 我可以在 Android 中设置 AlarmManager 的结束时间吗?

    我已经设置了一个AlarmManager在特定时间响起 然后每隔一段时间重复一次 是否可以告诉它在多少间隔后停止 甚至什么时候停止 这是我到目前为止所拥有的 Calendar calendar Calendar getInstance ca
  • 避免异步在方法签名中传播

    阻止我在 net 代码中不断使用异步 等待模式的原因是 一旦创建异步方法 async 关键字就会在我的代码中传播 迫使我使所有方法异步 有没有一种模式可以有效地阻止这种情况 阻止我在 net 代码中不断使用异步 等待模式的原因是 一旦创建异