何时使用 Task.Run、何时使用 async-await 以及何时组合使用它们

2023-12-05

我读过很多帖子,但仍然无法区分所有这些。我所能理解的是 Task.Run 将调用后台线程。 async-await 是异步编程。

Task.Run 是否意味着后台线程将表现为阻塞线程?

尝试从互联网下载多个大图像。我应该如何组合使用这些关键字以及为什么?


何时使用 Task.Run、何时使用 async-await 以及何时组合使用它们

我有一个关于该主题的整个博客系列,但总而言之:

  • Use Task.Run对于具有 UI 的应用程序,将受 CPU 限制(或阻塞)的工作移出 UI 线程。
  • Use async/await用于 I/O 密集型工作。

还有一些更罕见的情况Task.Run or async可能很有用,但以上两点为大多数情况提供了指导。

Task.Run 是否意味着后台线程将表现为阻塞线程?

Task.Run实际上可以同步或异步运行,但它确实使用了线程池线程。

我正在尝试在 .net 4.5 中创建桌面控制台应用程序

尝试从互联网下载多个大图像。我应该如何组合使用这些关键字以及为什么?

这是非 UI 应用程序中的 I/O 密集型操作,因此您绝对应该更喜欢async/await.

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

何时使用 Task.Run、何时使用 async-await 以及何时组合使用它们 的相关文章

  • 使用 lambda 表达式注册类型

    我想知道如何在 UnityContainer 中实现这样的功能 container RegisterType
  • 适合初学者的良好调试器教程[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 有谁知道一个好的初学者教程 在 C 中使用调试器 我感觉自己好像错过了很多 我知道怎么做 单步执行代码并查看局部变量 虽然这常常给我带来问
  • 使用 C# 登录《我的世界》

    我正在尝试为自己和一些朋友创建一个简单的自定义 Minecraft 启动器 我不需要启动 Minecraft 的代码 只需要登录的实际代码行 例如 据我所知 您过去可以使用 string netResponse httpGET https
  • ComboBox DataBinding 导致 ArgumentException

    我的几个类对象 class Person public string Name get set public string Sex get set public int Age get set public override string
  • 查找进程的完整路径

    我已经编写了 C 控制台应用程序 当我启动应用程序时 不使用cmd 我可以看到它列在任务管理器的进程列表中 现在我需要编写另一个应用程序 在其中我需要查找以前的应用程序是否正在运行 我知道应用程序名称和路径 所以我已将管理对象搜索器查询写入
  • 如何使用 Castle Windsor 将对象注入到 WCF IErrorHandler 实现中?

    我正在使用 WCF 开发一组服务 该应用程序正在使用 Castle Windsor 进行依赖注入 我添加了一个IErrorHandler通过属性添加到服务的实现 到目前为止一切正常 这IErrorHandler对象 一个名为FaultHan
  • 查看 NuGet 包依赖关系层次结构

    有没有一种方法 文本或图形 来查看 NuGet 包之间的依赖关系层次结构 如果您使用的是新的 csproj 您可以在此处获取所有依赖项 在项目构建后 项目目录 obj project assets json
  • 有没有办法伪造同步 XHR 请求?

    我正在使用 Emscripten 系统将一堆 C 代码移植到 Javascript C 代码有很多调用fopen这是一个同步 IO 调用 在 Emscripten 中 我们使用对本地资源的 XHR 请求来模拟这一点however 在 Fir
  • 使用 GCP 的数据存储区时如何区分代码是在模拟器中运行还是在 GKE 中运行

    按照中给出的说明进行操作后 我不确定是否遗漏了任何内容https cloud google com datastore docs tools datastore emulator https cloud google com datasto
  • 对 std::vector 进行排序但忽略某个数字

    我有一个std vector
  • Python 属性和 Swig

    我正在尝试使用 swig 为一些 C 代码创建 python 绑定 我似乎遇到了一个问题 试图从我拥有的一些访问器函数创建 python 属性 方法如下 class Player public void entity Entity enti
  • 告诉 Nancy 将枚举序列化为字符串

    Nancy 默认情况下在生成 JSON 响应时将枚举序列化为整数 我需要将枚举序列化为字符串 有一种方法可以通过创建来自定义 Nancy 的 JSON 序列化JavaScript 原始转换器 https github com NancyFx
  • 启动时的 Excel 加载项

    我正在使用 Visual C 创建 Microsoft Excel 的加载项 当我第一次创建解决方案时 它包含一个名为 ThisAddIn Startup 的函数 我在这个函数中添加了以下代码 private void ThisAddIn
  • 打破 ReadFile() 阻塞 - 命名管道 (Windows API)

    为了简化 这是一种命名管道服务器正在等待命名管道客户端写入管道的情况 使用 WriteFile 阻塞的 Windows API 是 ReadFile 服务器已创建启用阻塞的同步管道 无重叠 I O 客户端已连接 现在服务器正在等待一些数据
  • 在 NaN 情况下 to_string() 可以返回什么

    我使用 VS 2012 遇到了非常令人恼火的行为 有时我的浮点数是 NaN auto dbgHelp std to string myFloat dbgHelp最终包含5008角色 你不能发明这个东西 其中大部分为0 最终结果是 0 INF
  • WPF DataGridTemplateColumn 组合框更新所有行

    我有这个 XAML 它从 ItemSource 是枚举的组合框中选择一个值 我使用的教程是 http www c sharpcorner com uploadfile dpatra combobox in datagrid in wpf h
  • 使 Guid 属性成为线程安全的

    我的一个类有一个 Guid 类型的属性 该属性可以由多个线程同时读写 我的印象是对 Guid 的读取和写入不是原子的 因此我应该锁定它们 我选择这样做 public Guid TestKey get lock testKeyLock ret
  • WebBrowser.Print() 等待完成。 。网

    我在 VB NET 中使用 WebBrowser 控件并调用 Print 方法 我正在使用 PDF 打印机进行打印 当调用 Print 时 它不会立即启动 它会等到完成整个子或块的运行代码 我需要确保我正在打印的文件也完整并继续处理该文件
  • 使用 C 在 OS X 中获取其他进程的 argv

    我想获得其他进程的argv 例如ps 我使用的是在 Intel 或 PowerPC 上运行的 Mac OS X 10 4 11 首先 我阅读了 ps 和 man kvm 的代码 然后编写了一些 C 代码 include
  • Objective-C / C 给出枚举默认值

    我在某处读到过关于给枚举默认值的内容 如下所示 typedef enum MarketNavigationTypeNone 0 MarketNavigationTypeHeirachy 1 MarketNavigationTypeMarke

随机推荐

  • 当数组中元素的长度大于 2 时,出现“太多值无法解压(预期为 2)”

    也许问这个问题会很奇怪 因为我当然不明白 例如 如果我们有a 1 2 3 4 操作有效 for x y in a print x y 但是一旦我们向这些元组添加任何其他元素 a 1 2 3 4 5 6 for x y in a print
  • 循环和内置函数之间的数值不一致

    我正在尝试计算随机数数组的总和 但是 当我一次执行一个元素与使用内置函数时 结果之间似乎不一致 此外 当我降低数据精度时 误差似乎会增加 import torch columns 43 22 rows 44 torch manual see
  • C 中的通用数组元素交换

    我现在意识到 在我的许多代码中 我将有 2 或 3 个这样的函数 void swap int a int b int t a a b b t 每个都有自己的指针类型 我想知道的是 是否有一种方法可以交换数组的两个元素 例如 无论数组类型如何
  • 从 dask 中具有多个值的列创建虚拟对象

    我的问题与此主题类似从 pandas 中具有多个值的列创建虚拟对象 目标 我想在下面产生类似的结果 但使用 dask 在熊猫中 import pandas as pd df pd DataFrame fruit Banana Apple D
  • 简单的按钮点击连接到Python函数

    我有一个非常简单的 Qml Python 应用程序 其中有 StackView 中的一些内容 第一页包含一个简单的按钮 我的问题是 Qml 和 Python 之间的所有内容都仅通过信号工作吗 或者按钮可以直接从 python 脚本单击触发
  • 合并两个表/将值连接到单列中

    我有两个表 表 A 保存主产品数据 表 B 保存子产品数据 当表 A 只有一个不同的值时 我想更新表 A 以保存表 B 中相同列的相同值 如果不同计数大于一 我想用逗号连接列 除了键列名称之外 这些表具有相同的列 是否可以编写动态 SQL
  • Python正则表达式将每个匹配替换为自身加上新行

    我有一个很长的正则表达式 有很多交替 我希望能够将正则表达式中的每个匹配替换为自身 后跟新行 n 使用 re sub 最有效的方法是什么 这是一个简单的例子 s I want to be able to replace many words
  • 将 CSV 导入 R 时如何生成具有 CSV 名称的列?

    我有大量 csv 文件想要读入 R csv 中的所有列标题都是相同的 起初我以为我需要根据文件名列表创建一个循环 但搜索后我发现了一种更快的方法 这会正确读取并组合所有 csv 据我所知 filenames lt list files pa
  • CSS - 属性前的“#”符号[重复]

    这个问题在这里已经有答案了 可能的重复 以井号 开头的 CSS 属性有效吗 我尝试在 Stackoverflow com 上查找 但找不到与我的问题相关的任何内容 尽管雅虎上有答案 但开放网络也好不到哪去 回答 答案 除了 用于 ID 当然
  • 如何使用 perl 将第 n 行写入文件

    我在一个文件中有一个源文本 并正在寻找一个代码 该代码将从该文件中获取第二行 或通常是第 n 行 并打印到单独的文件中 知道如何做到这一点吗 您可以在 Perl 中使用以下命令本地执行此操作触发器运算符和特殊变量 内部使用 其中包含当前行号
  • Haskell 中类型别名的 Derive Eq 和 Show

    我有以下类型别名 data Bindable Const Value Variable Location Func Function Proc deriving Eq Show type Function Argument gt Store
  • Windows 中是否有屏幕调整大小事件

    我有一个简单的应用程序 当我连接到扩展坞时 它会更改数字锁定状态 问题是我不知道如何检测第二个显示器何时连接 和断开连接 因此我只在连接后设置状态 所以我正在寻找 Screen Resize 事件或类似事件 我正在使用 Windows 7
  • 如何使用 makefile 激活 virtualenv?

    在我的 makefile 的顶部有这样一行 SHELL bin sh 大多数命令都需要它 但是 我还想有一个 make 命令来激活我的虚拟环境 它位于不同的路径上 这是我为其编写的代码 activate source envs APP bi
  • Facebook 应用程序被重定向出画布视图

    我正在使用 iframe 从我的服务器渲染我的应用程序 问题是 一旦我单击应用程序中的链接 我就会被重定向到我的服务器 我的意思是 我在画布页面上停留了一秒钟 然后突然我不再在 Facebook 网站上的 iframe 中查看它 而是重定向
  • 三元运算符 VB 与 C#:为什么将 Nothing 解析为零? [复制]

    这个问题在这里已经有答案了 我只是搬起石头砸自己的脚 想知道是否有真正的原因导致这种情况成为可能 不管怎样 这个问题可以留下来 以方便未来的足射手 假设我们在 vb net 中有一个可为空的值 Dim i as Integer 我们想根据条
  • 返回字符串的 Junit 测试函数

    我在类中有一个函数 public String covertToLowerCase String sliceName sliceName sliceName trim toLowerCase sliceName sliceName repl
  • 在 pandas 数据帧上创建滚动自定义 EWMA

    我正在尝试在 df 的最后 13 个值上创建一个滚动 EWMA 其衰减 1 ln 2 3 如下 factor Out 36 EWMA 0 0 043 1 0 056 2 0 072 3 0 094 4 0 122 5 0 159 6 0 2
  • 识别给定应用程序池的 w3wp System.Diagnostics.Process

    我的服务器上运行的网站很少 我的应用程序中有一个 诊断 页面 显示内存量对于当前进程 非常有用 现在这个应用程序已 链接 到另一个应用程序 我希望我的诊断页面能够显示另一个 w3wp 进程的内存量 为了获取内存量 我使用一个简单的代码 va
  • Webapi odata 通过实体框架功能进行扩展

    我有一个产品 odata 控制器和一个产品类别 odata 控制器 它们都使用实体框架实体 并具有用于 odata 扩展的导航方法 两者的扩展工作正常 现在 我在实体框架中添加了一个存储过程来操作从数据库返回的数据 并仍然返回 产品 记录
  • 何时使用 Task.Run、何时使用 async-await 以及何时组合使用它们

    我读过很多帖子 但仍然无法区分所有这些 我所能理解的是 Task Run 将调用后台线程 async await 是异步编程 Task Run 是否意味着后台线程将表现为阻塞线程 尝试从互联网下载多个大图像 我应该如何组合使用这些关键字以及