将同步调用包装在 Task.Run() 中以使其异步是否有益?

2023-12-09

我提出这个问题的动机是因为我正在创建一个 .net Web API 项目,该项目将使用具有同步方法的现有 Neo4j Rest API 客户端。我想通过使用异步方法来利用一些性能提升,但我想避免进入 neo4j api 库并重构同步方法以返回异步方法。我想知道将对同步方法的调用包装在await Task.Run() 中是否会有好处。具体来说,第一个示例中当 httpClient 的异步结果调用 Wait() 方法时会发生什么,但整个事情都包装在另一个等待中。

另请记住,我将在 AppHarbor 云上运行它,我认为这是一个虚拟核心。

下面的也是如此

  //what happens with the synchronous rest api client I am using
  HttpResponseMessage SendHttpRequest(HttpRequestMessage request)
  {

        var requestTask = httpClient.SendAsync(request);
        requestTask.Wait();
        return requestTask.Result;

  }

  object result = await Task.Run(() =>
  {
      return SendHttpRequest(request);
  });

性能类似于

 return httpClient.SendAsync(request)

我想通过使用异步方法来利用一些性能提升,但我想避免进入 neo4j api 库并重构同步方法以返回异步方法。

抱歉,您将失去所有的好处async在服务器端,如果您只是将同步代码包装在Task.Run.

async在服务器上很好,因为异步操作比线程具有更好的扩展性。但如果你正在使用Task.Run,那么无论如何你都在使用线程。

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

将同步调用包装在 Task.Run() 中以使其异步是否有益? 的相关文章

  • 使用生成的 Golang DLL 返回字符串或 *C.Char

    我一直在努力追随z505 goDLL https github com z505 goDLL回购并遇到了一个大问题 该方法无法返回字符串 我无法读取结果的输出变量 这是我到目前为止使用的代码 Go 完整代码https play golang
  • Web Api - Swagger 文档错误 500

    当我访问 swagger url 时 http localhost 28483 swagger ui index 它会生成此错误 500 undefined http localhost 28483 swagger docs v1 有任何想
  • 如果我使用带有表单身份验证的 WCF,php 或 java 客户端将如何进行身份验证?

    我有一个通用的概念验证 WCF 服务 它使用表单身份验证来保护访问 当我的客户端是 NET 时 一切都很好 vb 代码如下 Dim client As SupplierServiceClient New SupplierServiceCli
  • 如何检查DBContext是否已释放?

    我想与从外部 继承类 调用的另一个方法共享数据库上下文 而不创建新的上下文 除非正在释放它 我想检查上下文是否已处理 以便我可以创建新的上下文 这是休息 api 有多个实体的批量上传 我想共享事务 因此如果一个实体失败 它将不会提交到数据库
  • 如何让CQRS适应项目? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我发现了一个新术语 名叫CQRS 命令查询职责分离 http martinfowler com bliki CQRS html其中指出 概念模型
  • .Net 6 控制台应用程序:WebApplication.CreateBuilder 与 Host.CreateDefaultBuilder

    我正在研究 NET 6 并希望构建一个简单的控制台应用程序 并进行一些依赖项注入 据我所知 为了使启动 现在只是程序 文件更具可读性 已经做了很多工作 让我有点困惑的是 所有改进似乎都是针对 API 项目中使用的 WebApplicatio
  • 如何访问Web api控制器中的mvc控制器以从视图中获取pdf

    我为单页 Web 应用程序创建了 Web Api 和 MVC 组合 我想调用 Web api 并渲染 mvc 控制器以使用 Rotativa api 从视图创建 pdf 问题是当我在 Web api 中访问 mvc 控制器时它不起作用 我如
  • 在不可变类型的构造函数中生成HashCode

    我对不可变类型的 HashCode 有一些疑问 我可以在构造函数中 预 生成不可变类型的 HashCode 还是有任何理由不这样做 当调用 GetHashCode 方法时 我是否应该再次生成哈希码 这是一个示例类 public class
  • .NET PInvoke 可以从用户指定的目录动态加载本机 dll 吗?

    我有一个 NET 应用程序 需要加载一个本机库 其位置由用户指定 PInvoke 看起来只会从全局搜索路径 或编译时指定的路径 加载 最好的方法是创建一个在运行时调用 LoadLibrary 的 C CLI 程序集吗 C CLI 会比 C
  • WCF获取证书编码值

    我在 WCF 服务中使用证书 因此在 web Config 中有一个编码值
  • 线程、进程和 Application.Exit()

    我的应用程序由主消息循环 GUI 和线程 Task Factory 组成 在线程中我调用一些第三方应用程序var p new Process 但是当我调用Application Exit 在消息循环中 我可以看到在线程中启动的进程仍在内存中
  • ModelBinder 验证在使用反射的 getter 上中断

    我遇到了一个似乎与反射和模型绑定验证有关的问题 并且FormatterParameterBinding ExecuteBindingAsync 特别是 虽然我可以使用方法来做我想做的事情 但如果我可以使用属性 我会更喜欢它 在这里 我正在寻
  • 实体框架未正确修改或删除子项

    我正在尝试保存Firm包含地址和网站的对象 我开发了在 Angular 7 中使用反应式表单在 UI 中添加和删除地址控件的功能 Firm对象 它正在为地址和网站创建附加条目 而不是将其视为现有记录 因此 如果我从 UI 中删除网站和地址
  • WPF Window 类的 IDisposable 成员

    当我将 IDisposable 类成员添加到 Windows 窗体 Form 类时 我将处置代码添加到 Form 的 Dispose 方法中 当我将 IDisposable 类成员添加到 WPF Window 类 不是 IDisposabl
  • 使用.NET 访问Windows 注册表?

    我发现一个奇怪的行为 NET http en wikipedia org wiki NET Framework模块访问Windows注册表 http en wikipedia org wiki Windows Registry使用Regis
  • 什么是 System.ContextBoundObject?

    What is 上下文绑定对象 http msdn microsoft com en us library system contextboundobject aspx用于 该文档提到了 上下文 它似乎是以编程方式定义的 但未能给出任何解释
  • ASP.NET 验证控件和 Javascript 确认框

    我有一个使用 NET 服务器端输入验证控件的页面 此页面还有一个 javascript 确认框 在提交表单时会触发该确认框 当前 当选择 提交 按钮时 会出现 javascript 确认框 一旦确认 就会触发 ASP NET 服务器端验证控
  • 为什么WebApi绑定System.Version参数失败?

    UPDATE 解决了 这里没什么可看的 请继续 我有一个ApiController方法需要一个System Version范围 该参数以 JSON 形式在请求正文中传递 这是发送的内容 专业 0 未成年人 7 构建 0 修订 0 主要修订
  • 如何调试 .NET 运行时中的内部错误?

    我正在尝试调试一些处理大文件的工作 代码本身works 但 NET 运行时本身会报告零星错误 对于上下文 这里的处理是一个 1 5GB 文件 仅加载到内存中一次 在循环中处理和释放 故意尝试重现此否则不可预测的错误 我的测试片段基本上是 t
  • DataContractSerializer 事件/委托字段问题

    在我的 WPF 应用程序中 我正在使用DataContractSerializer序列化对象 我发现它无法序列化具有事件或委托声明的类型 考虑以下失败的代码 Serializable public abstract class BaseCl

随机推荐

  • 调整 nginx worker_process 以获得每分钟 10 万次点击

    我们有一台服务于一个 html 文件的服务器 现在服务器有 2 个 CPU 和 2GB 内存 从 blitz io 来看 我们每分钟获得约 12k 个连接 在 60 秒内有 200 个超时 每秒有 250 个并发连接 worker proc
  • unicodedata.digit 和 unicodedata.numeric 之间有什么区别?

    From 统一码数据 doc unicodedata digit chr default 返回分配给的数字值 字符 chr 作为整数 如果没有定义这样的值 则默认为 返回 或者 如果未给出 则引发 ValueError unicodedat
  • 从Python执行页面上的JS代码

    我的任务是使用 Python 从任何网页获取命名函数的列表 我有一个使用 JavaScript 编写的脚本 它满足我的需要 加载页面后 我可以从 JS 控制台运行脚本 例如 从 GoogleChrome 中的开发工具 我得到了函数名称数组作
  • 上传错误#2038

    每当我使用此脚本进行测试时 它在上传尝试时都会不断失败并给出错误 IO 2038我可以肯定地说的是它甚至永远不会到达 Upload ashx 的后端脚本 这告诉我脚本有问题 现在我正在我的测试机器上使用 localhost 执行此操作 ht
  • 使用 Swing 在窗格中选择文件

    我正在 Swing 中编写一个 GUI 我想在主窗口中创建一个文件选择器 如下图所示 虽然似乎有很多关于如何编写弹出文件选择器的教程 但我没有看到太多关于如何在 swing 中完成这种类型的选择器的信息 也很抱歉 如果之前有人问过这个问题
  • 如何延迟推送通知权限弹出窗口 Swift

    我正在开发一个带有推送通知的应用程序 我想延迟推送通知权限弹出的出现 直到用户第三次进入我的应用程序之后 所以他应该对我的应用程序感兴趣 然后我想征求他的许可 我有办法做到这一点吗 我搜索了很多方法 就像这里 重置应用程序的推送通知设置但我
  • AngularJS 路由有什么意义?

    我正在创建一个网站 我选择在 AJ 中进行 我有两个文件夹 网关 gt 一些从 mysql 数据库检索数据并将数据作为 json 回显的 php 文件 Views gt 部分 html 文件 基本上是每个页面的模板 例如用户 项目等 然后我
  • 将参数括在括号中时,Ruby Kernel.raise 方法会引发错误

    我喜欢用括号括起来的方法参数 这是对 Pascal 的怀念 在清理代码时 如果我发现没有它的方法参数 我会立即将它们括起来 今天 它导致我的工作代码抛出错误 尽管根据文档我的语法看起来没问题 Kernel raise 的文档具有以下格式 O
  • C# 数据连接最佳实践?

    好吧 这是一种固执己见的话题 但根据你的知识 观点和当前的实践 设置以下场景的最佳方法是什么 我正在构建一个广泛的数据输入应用程序 我所说的广泛是指我只完成了基本设置 其中包含整个程序的大约 15 25 并且我有大约 15 个部分设置的表单
  • 将日历与闪亮的散点图链接起来

    如果可能的话 我希望您帮助我将我的日历链接到我想做的一些散点图 我要解释一下 我的想法是 当该人在日历上选择 01 01 2021 选项时 他会生成一个散点图 其中包含每个类别的第一个点 即 D1 DR01 DR02 DR03 和 DR04
  • stackoverflow错误:检查数字是偶数还是奇数,没有%或/运算符[重复]

    这个问题在这里已经有答案了 在没有 或 运算符的情况下检查数字是偶数还是奇数 public class EvenOrOdd public static int CheckEvenOrOdd int num if num gt 2 int n
  • 有人可以非常详细且易于理解地向我解释 SharedPreferences 在 Android 中的工作原理吗?

    我是 Android 开发新手 现在我真的很想学习共享首选项 我用谷歌搜索了很多次 但我认为我还没有完全掌握它 我相信此共享首选项将帮助我在登录屏幕活动中存储用户名和密码 感谢您 我制作了一些关于此的视频作为工作试镜 他们帮助我得到了这份工
  • 带 cookie 的 iPhone NSData/NSUrl

    我正在尝试播放 流式传输网站上托管的 mp3 该网站需要设置 cookie 标头 但我在设置该标头或让容器为我执行此操作时遇到困难 NSURL sampleUrl NSURL URLWithString http domain files
  • R - 使用任何其他列中的值填充列

    我有一个 5 列的数据框 4 列有值 1 列为空 我想用 4 列中任意一列中的任意值填充空列 假设这是我的数据框df Col1 Col2 Col3 Col4 Col5 11 11 2 2 2 23 4 4 15 15 我希望我的结果看起来像
  • 如何在 url asp.net mvc 4 中添加扩展名 .html?

    我有网址 http localhost 1714 Message Index 我想展示 http localhost 1714 Message Index html 我该怎么做 您需要修改 Web config 以将对 HTML 文件的请求
  • YouTube API 返回带有空列表的 nextPageToken

    这个问题与 YouTube API 500 1000 无关有意义的结果问题 我认为 YouTube API nextPageTokens 的工作方式是 一旦没有更多结果可返回 它们将为 null 但是 我看到一开始就返回了结果 但有时即使只
  • 如何将指针分配给矩阵的对角线?

    我有一个矩阵说REAL 8 MATRIX 100 100 我想仅从主对角线或上三角形创建一个指针 怎么做 目的是以干净的 命名 方式轻松访问这些元素 对于主对角线 请小心 您可以执行以下操作 PROGRAM diagonal IMPLICI
  • 过滤嵌套字典[重复]

    这个问题在这里已经有答案了 所以我有这本字典 Filme 1 Titel 20 Jahr 2 Wertung 6 Preis 50 Schauspielern a b c 2 Titel 30 Jahr 3 Wertung 7 Preis
  • 如何确定 TypeScript.Expression 对象的结果类型?

    使用 TypeScript 抽象语法树时 如何确定 TypeScript Expression 对象的结果类型 我正在使用 TSLint 并尝试查找不传递 Function 类型的对象作为第一个参数的 setTimeout 调用 例如 在下
  • 将同步调用包装在 Task.Run() 中以使其异步是否有益?

    我提出这个问题的动机是因为我正在创建一个 net Web API 项目 该项目将使用具有同步方法的现有 Neo4j Rest API 客户端 我想通过使用异步方法来利用一些性能提升 但我想避免进入 neo4j api 库并重构同步方法以返回