异步和异步方法澄清?

2023-12-15

AFAIK - (我读了很多相关内容),异步方法(not异步委托!


Task<T>与 I/O 阻塞问题无关。它就像打开一个线程(加上额外的效率和功能) - 但它仍然会导致线程消耗 CPU 量子等。

不必要。基本上有两种Tasks:执行一段同步代码,并在该代码执行完成时完成。这种Task块aThread从开始执行到完成(成功与否)的整个时间。

但还有另一种Task:当某事发生时完成的。这种Task是 .Net 4.5 和 C# 5.0 大量使用的内容,并且它不会阻止Thread(至少不是直接)。你可以创建这样的Task自己使用TaskCompletionSource<T>.

(另一点是,被阻塞的线程不会消耗任何 CPU,但这与这里无关。)

是不是就像创建一个Task<t> with ContinueWith?

Yes, await t非常类似于t.ContinueWith(rest of the method).

术语是不是很混乱?异步方法用于 I/O 操作(进行 I/O 操作时有零个线程在等待,并且没有线程处理它)。但是将代码(使用异步)调用为:异步方法有点令人困惑。你不觉得吗?因为我假设有另一个线程正在执行。

我没有看到混乱。经典的异步方法(例如BeginRead();这称为“异步编程模型”或 APM)是一种启动操作并在操作完成时收到通知(通过回调)的方法。现代异步方法(例如ReadAsync();这称为“基于任务的异步模式”或 TAP)也是一种启动操作并在操作完成时收到通知的方法(使用await).

在这两种情况下,都可能在方法返回之前执行一些代码(第一个之前的代码)await在 TAP 案例中)。

在这两种情况下,通知结果的常用方式不会阻塞任何线程(APM 的回调、await对于 TAP)。

在这两种情况下,如果需要,您可以使用阻塞等待(立即调用EndXxx()APM 方法,Wait()对于 TAP)。

这两种情况都可以用于在后台线程上执行同步代码(BeginInvoke()关于 APM 的代表,Task.Factory.StartNew()对于 TAP)。

再说一次,我没有看到混淆,这两个模型对我来说看起来非常相似。

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

异步和异步方法澄清? 的相关文章

  • 跟踪 C#/.NET 任务流

    我正在尝试找到一种方法来跟踪异步任务执行流程 以便轻松理解任务 启动它的原始流程是什么 我主要需要它来记录 调试和保留特定执行流的堆栈跟踪 例如 如果我的服务器有来自多个 IP 的许多客户端 并且服务器需要为每个客户端执行一个涉及许多异步操
  • Automapper 是否应该与私有设置器 OOB 一起使用?

    我有一个嵌套子类 其中包含带有私有设置器的公共属性 在父类中 我可以使用 Automapper 映射到子类 并且正在设置私有设置器的值 我读到的所有内容都表明 Automapper 不支持这一点 并且需要子类中的自定义构造函数来填充私有设置
  • 在 WPF 中,x:Name 和 Name 属性之间有什么区别?

    有时似乎Name and x Name属性是可以互换的 那么 它们之间的明确区别是什么 什么时候更适合使用其中一种呢 以错误的方式使用它们是否会对性能或内存产生影响 XAML 中确实只有一个名称 即x Name 框架 例如 WPF 可以选择
  • Elasticsearch,如何使 NEST 地图响应类

    首先 我使用的是NEST 5 5 0 我对远程 elasticsearch index 的使用如下 var node new Uri http distribution virk dk cvr permanent var settings
  • 如何在 Visual Studio 中调试 Windows PowerShell 模块?

    我正在尝试使用 Visual Studio 2015 将 PowerShell 模块编写为 VB NET 项目 我已经能够将一些命令放在一起 将类库编译到 DLL 中 将模块导入到 PowerShell 会话中并调用我创建的命令 到目前为止
  • 在并行任务与异步任务上使用 Task.Wait

    在章节中4 4 动态并行性 在史蒂芬 克利里的书中C 中的并发食谱 它说如下 并行任务可能会使用阻塞成员 例如Task Wait Task Result Task WaitAll 和 Task WaitAny 相比之下 异步 任务应该避免阻
  • 通用列表 FindAll() 与 foreach

    我正在浏览通用列表以查找基于特定参数的项目 一般来说 最好和最快的实施是什么 1 循环遍历列表中的每个项目并将每个匹配项保存到新列表中并返回 foreach string s in list if s match newList Add s
  • WPF DataGrid 验证错误?

    这可能是预期的功能 但对我来说它确实像是一个错误 我正在使用开箱即用的 WPF DataGrid 绑定到 ObservableCollection 和尝试使用一些验证规则来提供良好的用户反馈 不用说 问题多得我数不过来 但我会坚持眼前的问题
  • C++/CLI 从具有抽象方法的本机 C++ 类继承并将其公开给 C#

    我一直在谷歌上转圈子 试图找到一个成熟的例子 但没有成功 我有一个 C API 它提供了许多包含纯虚方法的类 供开发人员从中进行扩展 我试图做的是通过 C CLI 向 C 提供此接口 我已经设法将 API 编译到 C CLI 库中 但由于我
  • 获取 UWP 应用中当前登录用户的用户名/用户 ID

    我想要得到username或用户idUWP 应用中当前登录的用户的信息 下面是我正在使用但它返回的代码null var current users Where p gt p AuthenticationStatus UserAuthenti
  • 使对象在运行时可序列化[关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 有没有办法在运行时使对象可序列化 我应该使用反射吗 注意 该对象是外部库的一部分 因此我没有它的源代码 tl 博士 不 虽然您可以使用Typ
  • C# - 从自定义应用程序读取嵌套事件日志

    我在用sysmon https technet microsoft com en us sysinternals dn798348捕获一堆事件信息 网络连接 DLL 加载等 我想提取该信息并将其用于各种目的 但似乎没有任何方法可以检索嵌套日
  • 如何在 C# 中绘制蜡烛图 [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 如何在 C 中绘制蜡烛图 有人有任何界面漂亮的例子吗 我用过MSChart http code msdn
  • system.web.http.HttpError 的.Net 标准/核心版本

    从 net Framework 迁移到 net Standard Core 时 我遇到了 HttpError 类 除了兼容性垫片之外 我在 net core standard 中找不到任何等效项 这只是一个临时解决方案 不知道官方有没有替代
  • 来自外部 DLL 的未处理的 DivideByZero 异常 - C#

    我有一个 C net 4 0 程序 其主要功能是从外部 FTP 库 项目引用的 dll 调用方法 逻辑位于 try catch 块中 catch 会打印错误 异常处理程序有一个通用参数 catch Exception ex IDE是VS 有
  • 通过 WCF 提供类对象的数组或列表

    任何提供自定义类对象列表或数组的 WCF 客户端服务器示例都会对我有所帮助 但这是我到目前为止所得到的 这是我想提供的班级系统 namespace NEN Server FS Serializable public class XFS pr
  • WebProxy 错误:需要代理身份验证

    我使用以下代码从互联网获取html数据 WebProxy p new WebProxy localproxyIP 8080 true p Credentials new NetworkCredential domain user passw
  • GetReferencedAssemblies 不返回所有程序集

    我在表单中有以下代码 并试图找到一种方法来加载由名为的表单引用的项目程序集DataObjects 使用以下代码 我只列出了六个程序集 查看表单所在项目的引用 有十三个程序集引用 这里有什么问题吗 private void ListRefer
  • Oracle DataAccess 相关:“动态程序集中不支持调用的成员。”

    据我了解 此类错误已在 SO 上讨论过多次 有些人认为这是 DLL 文件中的错误 有些人通过更改 DLL 版本来解决 其他人似乎没有任何线索 无论如何 我只是发帖试试运气 在 C GUI 上的网格中选择一行时 我的应用程序崩溃了 stack
  • 如何检查应用程序的 .NET 版本?

    除了在仅具有 NET Framework 版本 3 5 的计算机上运行之外 如何检查 NET 应用程序的版本 NET 框架版本控制在 NET 2 0 之后变为 foobar 一个应用程序的目标是CLR版本 它使用 EXE 的程序集元数据来实

随机推荐

  • v8 存储一个字符串需要多少内存?

    我正在尝试计算 v8 中字符串的内存使用量 并且我知道单个字符将占用 2 个字节 但是当我在开发工具中检查浅层大小和保留大小时 我对结果感到困惑 function Student this name lll var a new Studen
  • jQuery,检查视频是否有高度/宽度

    我有一个
  • 如何将 FFMpeg 构建为 iOS 框架

    我正在尝试在 FFMpeg 上构建自己的播放器基础 我成功将 FFMpeg 构建为静态库 a 但需要复制另一个头文件才能使用 我希望它能像框架一样使用 但即使我将头文件添加到框架中 设置为公共 我的演示应用程序在 FFMpeg framew
  • ASP.NET:为什么无法禁用控件状态

    我知道 ASP NET 不允许禁用控件状态 有谁知道吗why 我用谷歌搜索了很多 但只看到这是不可能的 但找不到 为什么 任何对此的想法都将受到欢迎 附 在我的特定情况下 我需要将很多项目放入下拉列表中 这些项目不会用于服务器端事件 我需要
  • 我被刮伤了,我该如何防止这种情况发生?

    运行 IIS 7 每周几次 我会看到来自一个地理位置的 Google Analytics 上的大量点击 他们正在查看的网址序列显然是由某种算法生成的 所以我知道我正在被抓取内容 有什么办法可以防止这种情况发生吗 谷歌不只给我一个IP 这让我
  • Android 多列列表视图

    我正在为我的应用程序创建一个排行榜 高分列表 我想以 4 列显示数据 排名 名称 创建者 得分 并通过对象列表相应地填充它们 我想在列表中一次显示 5 个项目 总共 20 个项目 使列表可滚动 我找不到合适的方法来做到这一点 由于我的工作截
  • 填充内联元素的顶部和底部

    引用 Head First html 您可以在内联元素的顶部和底部添加内边距 但内边距不会影响其周围其他内联元素的间距 因此内边距会与其他内联元素重叠 a 据我理解上面的引用 向内联元素的顶部和底部添加填充不会 永远 对周围的元素产生任何影
  • 是否可以修复完整内存转储,以便不再需要运行 .imgscan /l ?

    由于某种原因 我已经开始接收来自需要运行的生产的转储 imgscan l first 现在 我倾向于使用从 powershell 脚本调用的 CDB 对转储运行小型查询 然而 运行 imgscan l每次都需要相当长的时间 是否可以以渲染的
  • 当我使用 Nightmare 时,在页面之间移动并进行抓取

    有一个网站 其中包含一个包含 25 个条目列表的页面 其中每个条目都是指向包含我需要的一些信息的页面的链接 我想进入列表页面 然后 1 点击第一个条目的链接 2 检索所有html 3 点击返回列表页面 有一个按钮 4 对所有其他列表重复此操
  • 在 libav 中读取 dumepd RTP 流

    嗨 我需要一些帮助 指导 因为我陷入了我的研究之中 问题 如何在 API 通过编程 或控制台版本中使用 gstreamer 或 avlib ffmpeg 转换 RTP 数据 Data 我有来自 TCP 上的 RTP RTCP 的 RTP 转
  • WPF 动画仅触发一次

    我有一个小椭圆 每次依赖属性设置为 true 时我都希望它闪烁 因为该属性可以在几毫秒内很快从 true 变回 false 所以我需要使用动画而不是简单样式的数据触发器来完成此操作 基本上 我只想要真正的值来 ping 椭圆上的动画
  • fwrite 内部是否调用任何锁?

    在Solaris 中 当我将dbx 连接到正在运行的堆栈之一时 我发现对fwrite 的调用导致了 lll lock wait 什么情况下会发生这种情况 fwrite 是否在内部尝试获取锁 我查看的标准 C99 和 POSIX 没有提及有关
  • 如何在詹金斯中添加管理构建?

    我试图弄清楚如何向 Jenkins 添加管理构建来管理一些构建 以及如何将参数从管理构建传递到子构建 参数化触发器插件这就是您正在寻找的 安装插件后 请参阅下面的第二个快照 去Configure您的项目的页面 搜索Build gt Add
  • 从日期数组中查找缺失的日子 javascript

    我从 API 获取了一系列日期 0 date 2016 11 17T00 00 00 1 date 2016 11 18T00 00 00 2 date 2016 11 19T00 00 00 3 date 2016 11 21T00 00
  • 如何强制 CKEditor 保留
    标签

    我正在使用最新版本的 CKEditor 迄今为止为 4 7 和标准包 并且我希望能够强制它保留换行符元素 br 我尝试使用以下配置 但没有成功 CKEDITOR replace ck allowedContent true enterMod
  • 如何在 Flutter 的 pubspec.yaml 中以正确的方式设置依赖项

    以下是 Flutter 项目中 pubspec yaml 文件中的一些依赖项示例 dependencies flutter sdk flutter cloud firestore 0 14 4 firebase core web 0 2 1
  • Sublime Text 2 控制台和 python 3

    I am able to set python3 2 for the build command in sublime text 2 and build with python3 2 but when invoking the consol
  • 使用 nodeJS 和 Gulp 任务运行器自动缩小

    我需要一些建议来改进 node 和 gulp 的自动缩小 主要目标是在开发模式下动态生成缩小文件 JS 和 LESS 并在生产模式下自动将普通文件 js 和 less 更改为缩小文件 该场景包含 NodeJS 和 ExpressJS 用于路
  • 用颜色绘制 PCA 分数

    我正在做 PCA 我想在 R 中绘制第一个主成分与第二个主成分的关系 pca lt princomp data data na action na omit plot pca scores 1 pca scores 2 或者可能是几个主要组
  • 异步和异步方法澄清?

    AFAIK 我读了很多相关内容 异步方法 not异步委托 Task