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

2023-12-05

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


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

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

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

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

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

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

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

  • 为什么 C 程序使用 Scanf 给出奇怪的输出?

    我目前正在学习 C 编程 并且遇到了这个奇怪的输出 Program will try functionalities of the scanf function include
  • C# 中的 Stack<> 实现

    我最近一直在实现递归目录搜索实现 并且使用堆栈来跟踪路径元素 当我使用 string Join 连接路径元素时 我发现它们被颠倒了 当我调试该方法时 我查看了堆栈 发现堆栈内部数组中的元素本身是相反的 即最近 Push 的元素位于内部数组的
  • 在 C++ 代码中转换字符串

    我正在学习 C 并开发一个项目来练习 但现在我想在代码中转换一个变量 字符串 就像这样 用户有一个包含 C 代码的文件 但我希望我的程序读取该文件并插入将其写入代码中 如下所示 include
  • 如何在 C# 中将 Json 转换为对象

    我想将 Json 转换为 C 中的对象 这里的 Json 是 值 e920ce0f e3f5 4c6f 8e3d d2fbc51990e4 如何使用 Object 问题看似愚蠢 但其实并不那么愚蠢 我没有简单的 Json 我有 IEnume
  • 链接 .Net 程序集

    这都是假设 所以请耐心等待 假设我正在用 C 编写一个名为 Foo 的工具 输出是 foo exe 我发现了一些我喜欢使用的非常棒的库 称为 Bar 我可以在我的项目中将其引用为 bar dll 当我构建项目时 我的输出目录中有 foo e
  • 2个对象,完全相同(除了命名空间)c#

    我正在使用第三方的一组网络服务 但遇到了一个小障碍 在我手动创建将每个属性从源复制到目标的方法之前 我想我应该在这里寻求更好的解决方案 我有 2 个对象 一个是 Customer CustomerParty 类型 另一个是 Appointm
  • 使用 C# 和 ASP.NET 在电子邮件附件中发送 SQL 报告

    我正在尝试使用 ASP NET 和 C 从 sql reportserver 2008 作为电子邮件附件发送报告 到目前为止我学会了如何获取 PDF 格式的报告 http weblogs asp net srkirkland archive
  • 防止控制台应用程序中的内存工作集最小化?

    我想防止控制台应用程序中的内存工作集最小化 在Windows应用程序中 我可以这样做覆盖 SC MINIMIZE 消息 http support microsoft com kb 293215 en us fr 1 但是 如何在控制台应用程
  • 为什么这个 makefile 在“make clean”上执行目标

    这是我当前的 makefile CXX g CXXFLAGS Wall O3 LDFLAGS TARGET testcpp SRCS main cpp object cpp foo cpp OBJS SRCS cpp o DEPS SRCS
  • Makefile 和 .Mak 文件 + CodeBlocks 和 VStudio

    我对整个 makefile 概念有点陌生 所以我对此有一些疑问 我正在 Linux 中使用 CodeBlocks 创建一个项目 我使用一个名为 cbp2mak 的工具从 CodeBlocks 项目创建一个 make 文件 如果有人知道更好的
  • Guid.NewGuid().GetHashCode() 用于数据库

    这对于用作数据存储 SQL Server 的 ID 可靠吗 我会使用 guid 但我更喜欢数字值 A guid更有可能代表一个记录uniquely than a numeric value 随着 GUID 确保全球唯一性 GUID 可以跨数
  • Linux 上的 RTLD_LOCAL 和dynamic_cast

    我们有一个由应用程序中的一些共享库构成的插件 我们需要在应用程序运行时更新它 出于性能原因 我们在卸载旧插件之前加载并开始使用新插件 并且只有当所有线程都使用旧插件完成后 我们才卸载它 由于新插件和旧插件的库具有相同的符号 我们dlopen
  • 如何对使用 Controller.User 变量的控制器操作进行单元测试?

    我有一个控制器操作 如果用户已经登录 它会自动重定向到新页面 User Identity IsAuthenticated 针对这种情况编写单元测试以确保重定向发生的最佳方法是什么 我一直在使用以下 Mocks 和 Moq 来允许在我的单元测
  • MySQL 连接器 C++ 64 位在 Visual Studio 2012 中从源代码构建

    我正在尝试建立mySQL 连接器 C 从源头在视觉工作室2012为了64 bit建筑学 我知道这取决于一些boost头文件和C 连接器 跑步CMake生成一个项目文件 但该项目文件无法编译 因为有一大堆非常令人困惑的错误 这些错误可能与包含
  • 当Model和ViewModel一模一样的时候怎么办?

    我想知道什么是最佳实践 我被告知要始终创建 ViewModel 并且永远不要使用核心模型类将数据传递到视图 这就说得通了 让我把事情分开 但什么是Model 和ViewModel一模一样 我应该重新创建另一个类还是只是使用它 我觉得我应该重
  • 使用 gcc 时在头文件中查找定义的好方法是什么?

    在使用 gcc 时 有人有推荐的方法在头文件中查找定义吗 使用 MSVC 时 我只需右键单击并选择 转到定义 这非常好 我使用过 netbeans gcc 它确实有代码帮助 包括到定义的超链接 所以这是一种选择 但是 我想知道是否有任何其他
  • 在哪里可以找到 Microsoft.Build.Utilities.v3.5

    如何获取 Microsoft Build Utilities v3 5 我正在使用 StyleCop 4 7 Stylecop dll 中的 StyleCop msbuild 任务似乎依赖于 Microsoft Build Utilitie
  • 如何在C#中控制datagridview光标移动

    我希望 datagridview 光标向右移动到下一列 而不是在向单元格输入数据后移动到下一行 我试图通过 dataGridView1 KeyDown 事件捕获键来控制光标 但这并不能阻止光标在将数据输入到单元格后移动到下一行 提前感谢你的
  • 如何获取带有某个属性注释的所有属性?

    我刚刚从 Roslyn 开始 我想找到所有用属性名称 OneToOne 注释的属性 我启动了 SyntaxVisualizer 并能够获取对该节点的引用 但我想知道是否有更简单的方法来实现此目的 这就是我所拥有的 var prop docu
  • .Net Reactive Extensions Framework (Rx) 是否考虑拓扑顺序?

    Net 反应式扩展框架是否按拓扑顺序传播通知以最大限度地减少更新量 就像 Scala Rx 所做的那样 Net 反应式扩展 Rx 是否可以 https github com lihaoyi scala rx wiki How it Work

随机推荐

  • 使用 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 代码中不断使用异步 等待模式的原因是 一旦创建异