为什么可以等待 Rx observable? [复制]

2023-11-26

我刚刚注意到await关键字可以与 Rx Observable 一起使用,例如:

await Observable.Interval(TimeSpan.FromHours(1));

我非常确定它只能与任务结合使用。

那么是什么让它成为可能呢?可观察到的知识是否硬编码到编译器中?


不,编译器没有特殊知识IObservable<T>。根据 C# 5 规范第 7.7.7.1 节,如果对象有一个方法或者在名为 的范围内有一个扩展方法GetAwaiter返回一个实现的类型System.Runtime.CompilerServices.INotifyCompletion,可以等待。请参阅 Steven Toub 的文章,等待任何事情.

更具体地说,从规范

await 表达式的任务必须是可等待的。一种表达t is 等待的如果以下条件之一成立:
- t是编译时类型动态
- t有一个名为 GetAwaiter 的可访问实例或扩展方法,不带任何参数和类型参数,并且返回类型 A 满足以下所有条件:
1. A 实现接口 System.Runtime.CompilerServices.INotifyCompletion(以下简称 INotifyCompletion)
2. A 有一个可访问、可读的 bool 类型实例属性 IsCompleted
3. A有一个可访问的实例方法GetResult,没有参数,也没有类型参数

请注意这与如何相似foreach不需要IEnumerable<T>但只是一个返回兼容对象的 GetEnumerator 方法。这种鸭子类型是一种性能优化,允许编译器在不装箱的情况下使用值类型。这可用于避免性能敏感代码中不必要的分配。

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

为什么可以等待 Rx observable? [复制] 的相关文章

  • 读取大文件并制作字典

    我有一个大文件 我需要读取它并从中制作字典 我希望这一切能够尽可能快 然而我的Python代码太慢了 这是一个显示问题的最小示例 首先制作一些假数据 paste lt seq 20000000 lt seq 2 20000001 gt la
  • C++0x 初始值设定项列表示例

    我想看看这个现有代码示例如何利用 C 0x 初始化列表功能 示例0 include
  • 是否有可能将 *.pdb 文件包含到发布版本中以查看错误行号?

    我做了一个项目 所有设置都是默认的 当我在调试模式 构建配置 调试 下运行它并遇到异常时 它转储到我的自定义日志记录机制 其中包含错误行号 但是当我运行发布构建时 记录相同的异常 没有行号 只有方法抛出和记录调用堆栈 是否有可能在发布配置
  • 静态 OpenCV 库中未定义的引用

    我有一个使用 OpenCV 3 1 的 C 项目 并且使用共享库可以正常工作 但现在我想使用静态库 位于项目目录中的文件夹中 来编译它 因为我希望能够在未安装 OpenCV 的情况下导出它 如果需要还可以编辑和重新编译 这次我重新编译了 O
  • 如何在 ASP.NET Core 6.0 Web API 项目中启用 cors?

    在我的 ASP NET Core 6 0 Web API 项目中配置了 CORS 但预检请求收到 http 405 错误 换句话说 不允许使用 HTTP OPTION 看起来 cors 没有启用 我见过的例子config EnableCor
  • C语言中没有循环可以打印数组吗?

    例如 在Python中 如果我们将一个列表作为数组 它会直接用一行代码打印整个数组 有什么办法可以用C语言实现同样的事情吗 简短回答 No 对表格上几乎所有问题的简短回答 用 C 语言做 X 工作能像用 Python 一样简单吗 No 长答
  • c 使用 lseek 以相反顺序复制文件

    我已经知道如何从一开始就将一个文件复制到另一个文件 但是我如何修改程序以按相反的顺序复制它 源文件应具有读取访问权限 目标文件应具有读写执行权限 我必须使用文件控制库 例如 FILE A File B should be ABCDEF FE
  • PartialView Action 正在调用自身

    我有 MVC 应用程序 它用于从主视图 ProductMaster 将 ProductAreaGrid 列表显示为 PartialView 并且它将在局部视图内将 CreateProductArea 作为 PartialView 我的 Gr
  • 从二进制文件读取字节到 long int

    我有两个问题 我有二进制文件的数据 我想使用 read 函数读取前 8 个字节以签署 long int 但我不能 你知道我该怎么做吗 如何直接读取一块数据到字符串中 我可以像所示那样阅读吗 前任 ifstream is is open te
  • 文件加密与解密问题

    我一直在尝试在 VC Express 2010 中加密和解密文件 我见过的所有教程和文档都需要两个FileStreams 来加密文件 一个用于读取未加密的版本 另一个用于加密 当我实际编写代码时 它不断抛出错误 告诉我它无法打开该文件 因为
  • 禁用实体框架的默认值生成(Code First)

    我数据库中有一个列不能为空 我想将其设置为默认值在数据库中 问题是实体框架似乎自己创建了一个默认值 例如 int gt 0 并且完全忽略了数据库中的默认值约束 有没有办法禁用实体框架的默认值 我发现您可以使用以下属性来装饰您的字段 Data
  • 如何在 ASP.NET Core 项目中使用 MStest 测试 Ok() 结果

    我正在使用 MStest 来测试我的控制器 我想测试这个动作 HttpGet Name GetGroups public async Task
  • XCode std::thread C++

    对于学校的一个小项目 我需要创建一个简单的客户端 服务器结构 它将在路由器上运行 使用 openWRT 并且我试图在这个应用程序中使用线程做一些事情 我的 C 技能非常有限 所以我在internet https stackoverflow
  • 动态菜单创建IoC

    我想知道是否有人知道我如何创建如何使用 AutoFac 之类的东西来让我动态地允许 dll 创建自己的表单和菜单项以在运行时调用它们 所以如果我有一个 员工 dll 新入门表格 证书表格 供应商 dll 供应商详细信息来自 产品形态 在我的
  • 在 lua 中加载 C++ 模块时出现“尝试索引字符串值”错误

    我正在尝试使用 lua 用 C 编写的函数 下面给出的是cpp文件 extern C include lua h include lauxlib h include lualib h static int add 5 lua State L
  • C# 模式匹配

    我对 C 有点陌生 我正在寻找一个字符串匹配模式来执行以下操作 我有一个像这样的字符串 该书将在 唐宁街 11 号接待处 并将由主要医疗保健人员参加 我需要创建一个 span 标签来使用 startIndex 和 length 突出显示一些
  • 使用方法的状态模式

    我正在尝试使用方法作为状态而不是类来基于状态模式的修改版本来实现一个简单的状态机 如下所示 private Action
  • 包含从代码隐藏 (ASP.NET C#) 到 ASPX 中的图像概述的图像列表 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • C# 和断点 - 这里有魔术师吗?

    我有这个 public static void ByLinkText string text for var i 0 i lt 50 i try Setup Driver FindElement By LinkText text Click
  • 有没有办法在 C# 中仅通过文件名查找文件?

    我们现在使用绝对路径或相对路径在 C 应用程序中查找文件 如果文件位于当前工作目录下或 路径 之一下 有没有办法仅通过名称查找文件 使用绝对路径不好 使用相对路径也不够好 因为我们可能通过重命名或移动项目文件夹来更改项目结构 如果我们的代码

随机推荐

  • SparkSQL SQL 查询写入 JDBC 表的是什么?

    用于 Spark 中的 SQL 查询 对于读取 我们可以通过以下方式读取 jdbc CREATE TEMPORARY TABLE jdbcTable USING org apache spark sql jdbc OPTIONS dbtab
  • Java 和 Xerces:找不到属性 XMLConstants.ACCESS_EXTERNAL_DTD

    我在此博客上查找了类似的帖子 但找不到我的问题的答案 因此我决定寻求帮助 我用 Java 编写了这个简单的函数 public void open InputStream stream throws FoliumFatalException
  • Python - 正确终止/退出期货线程?

    我之前使用的是threading Thread模块 现在我正在使用concurrent futures gt ThreadPoolExecutor 以前 我使用以下代码来退出 终止 完成线程 def terminate thread thr
  • 如何将枚举值传递给 wcf webservice

    ksoap2 可以将枚举传递给 web 服务吗 有一个wcf网络服务 OperationContract string TestEnum CodeType code CodeType 是 dotnet 枚举 public enum Code
  • 通过单击按钮更改 viewpager 片段

    我试图通过单击按钮来更改 viewpager 片段 我有 5 个片段 每个片段都有自己的 xml 文件 frag1 xml frag2 xml 等 每个片段都有 5 个按钮 可以转到 viewpager 的其他页面 但问题是如何在 Frag
  • 无法通过 PuTTY 连接到亚马逊 EC2 实例

    我在 Amazon Web Services AWS 中创建了一个新的 Amazon EC2 实例 参考文档 我什至添加了这样的 SSH 规则 Port 22 Type SSH Source
  • Calendar.Month 给出错误的输出

    我一直在使用java util对于所有日期和日历表示 但我在这里面临一个奇怪的问题 Calendar MONTH Calendar DAY OF MONTH等都给出错误的输出 但是当我使用Calendar getTime 我得到了正确的输出
  • Go 中的 Marshall 映射到 XML

    我尝试将地图输出为 XML 数据 但收到以下错误 xml unsupported type map string int 编组映射对于 JSON 工作得很好 所以我不明白为什么它对于 XML 不能同样工作 使用 Struct 真的是唯一的方
  • Git - 删除 Blob

    有没有一种方法或命令可以使用 ID 从 git 中删除 blob 我使用了命令 git rev list objects all git cat file batch check objectname objecttype rest gre
  • Ember:如何将 TinyMCE 文本区域字段值绑定到模型

    我在模板中嵌入了 TinyMCE 现在 我想对 TinyMCE 编辑器 实际上是一个文本区域 的内容进行值绑定 See http jsfiddle net cyclomarc wtktK 10 在文本字段中输入文本时 bodyText 中的
  • 嵌入式 HSQLDB 将数据保存到文件中

    我正在创建一个基于 spring 的 Web 应用程序 该应用程序使用嵌入式 hsqldb 我的 spring 配置非常简单
  • Xamarin 在 Android 中形成 Shadow on Frame

    Xamarin Forms 中的 Frame 类非常有限 不允许我在 Frame 后面获得阴影 我使用以下代码为 iOS 制作了一个自定义渲染器 public class RatingInfoFrameRenderer FrameRende
  • Azure Blob 存储的事务访问

    我想将文件存储在 Azure Blob 存储中 到目前为止 一切都很好 我还想存储有关该文件的附加元数据 为此 我使用 Azure SQL 数据库 因此我可以轻松查询 Blob 存储上的文件 因此 当我向存储添加新文件时 我想确保 blob
  • 单行嵌套 For 循环[重复]

    这个问题在这里已经有答案了 用Python编写这个转置矩阵的函数 def transpose m height len m width len m 0 return m i j for i in range 0 height for j i
  • 设计问题:电话拨打电话号码,还是电话号码在电话上拨打自己?

    这是从我在 DDD Yahoo 上发布的内容重新发布的 团体 在所有条件相同的情况下 您是写phone dial phoneNumber 还是phoneNumber dialOn phone 请记住未来可能的需求 除了电话号码之外的帐号 除
  • 密码中是否应该允许使用空格字符?

    我尝试过不同的网站 产品 这似乎分配得相当均匀 Windows 7 和 Gmail 允许您在密码中插入空格 Hotmail 和 Twitter 则不然 虽然在密码中允许空格会增加密码的复杂性 但似乎许多网站 程序不允许它们 是否有充分的理由
  • 如何在 SPSS 中循环变量?我想避免代码重复

    是否有 原生 SPSS 方法来循环某些变量名称 我想做的就是获取变量列表 我定义的 并为它们运行相同的过程 伪代码 这不是一个很好的例子 但很能说明问题 for i in varlist a b c do FREQUENCIES VARIA
  • CLI/C++ 到底是什么?它与“普通”c++ 有什么不同?

    首先让我澄清一下 普通 C 的含义 我目前正在阅读 Walter Savitch 的 C 中的问题解决 据我所知 这不是专门为 Microsoft 或 Unix 编写的 所以我的问题是 我在这本书中学到的内容 我用它来获取 C 的通用知识
  • 旋转下拉列表在滚动时跳跃

    为什么我的旋转器在滚动时会跳跃 我只是做以下事情 ArrayAdapter
  • 为什么可以等待 Rx observable? [复制]

    这个问题在这里已经有答案了 我刚刚注意到await关键字可以与 Rx Observable 一起使用 例如 await Observable Interval TimeSpan FromHours 1 我非常确定它只能与任务结合使用 那么是