返回Task的接口的同步实现

2024-02-24

如同在同步代码中实现需要 Task 返回类型的接口 https://stackoverflow.com/questions/26352034/implementing-an-interface-that-requires-a-task-return-type-in-synchronous-code尽管我很好奇我是否应该忽略我的情况生成的编译器错误。

假设我有一个这样的界面:

public interface IAmAwesome {
    Task MakeAwesomeAsync();
}

在某些实现中,使用异步完成可以带来巨大的好处async and await。这确实是界面试图允许的。

在其他情况下,也许很少见,只需要一个简单的同步方法就可以变得很棒。因此,我们假设实现如下所示:

public class SimplyAwesome : IAmAwesome {
    public async Task MakeAwesomeAsync() {
        // Some really awesome stuff here...
    }
}

这可行,但编译器警告:

该方法缺少“await”运算符,并且将同步运行。 考虑使用await等待非阻塞 API 调用的运算符, 或“await TaskEx.Run(...)”在后台执行 CPU 密集型工作 线。

编译器实际上建议这个解决方案:

public class SimplyAwesome : IAmAwesome {
    public async Task MakeAwesomeAsync() {
        await Task.Run(() => {
            // Some really awesome stuff here, but on a BACKGROUND THREAD! WOW!
        });
    }
}

我的问题是 - 当我选择忽略此编译器警告时,应该由什么决定?在某些情况下,工作非常简单,因此为其生成线程无疑会适得其反。


如果您确实想同步完成工作,您知道您的async方法将始终同步运行,这在这种情况下是可取的,然后无论如何,忽略警告。如果您了解警告的含义并认为其描述的操作是正确的,那么这不是问题。毕竟这是一个警告而不是错误是有原因的。

当然,另一种选择是不使用该方法async并简单地使用Task.FromResult返回已完成的任务。它将改变错误处理语义(除非您还捕获所有异常并将它们包装到您返回的任务中),所以至少要注意这一点。如果您确实希望通过结果传播异常Task,可能值得离开该方法async并只是抑制警告。

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

返回Task的接口的同步实现 的相关文章

  • C# 方法重载决策不选择具体的泛型覆盖

    这个完整的 C 程序说明了这个问题 public abstract class Executor
  • 在 CPP 类中将 C 函数声明为友元

    我需要在 C 函数中使用类的私有变量 我正在做这样的事情 class Helper private std string name public std getName return name friend extern C void in
  • 将类对象放置在向量中?

    我注意到我可以将一个类放置在一个向量中 这是我的程序 我收到以下错误 out blackjack exe blackjack obj blackjack obj error LNK2019 unresolved external symbo
  • 现代 C++ 编译器是否能够在某些情况下避免调用 const 函数两次?

    例如 如果我有以下代码 class SomeDataProcessor public bool calc const SomeData d1 const SomeData d2 const private Some non mutable
  • 当事件button.click发生时,如何获取按钮名称/标签?

    我以编程方式制作按钮并将它们添加到堆栈面板中 以便每次用户导航到页面时按钮都会发生变化 我正在尝试做这样的事情 当我单击创建的按钮时 它将获取按钮的标签并转到正确的页面 但是 我无法使用 RoutedEventHandler 访问按钮元素
  • 如何将 SOLID 原则应用到现有项目中

    我对这个问题的主观性表示歉意 但我有点卡住了 我希望之前处理过这个问题的人能够提供一些指导和建议 我有 现在已经成为 一个用 C 2 0 编写的非常大的 RESTful API 项目 并且我的一些类已经变得巨大 我的主要 API 类就是一个
  • 如何将 .txt 文件中的数据转换为 xml? C#

    我在一个文本文件中有数千行数据 我想通过将其转换为更容易搜索的内容来轻松搜索 我希望 XML 或其他类型的大型数据结构 尽管我不确定它是否是最好的对于我的想法 每行的数据如下所示 第 31 册 托马斯 乔治 32 34 154 每本书都不是
  • 如何使用 Regex.Replace 从字符串中删除数字?

    我需要使用Regex Replace从字符串中删除所有数字和符号 输入示例 123 abcd33输出示例 abcd 请尝试以下操作 var output Regex Replace input d string Empty The d标识符
  • Eigen 和 OpenMP:由于错误共享和线程开销而没有并行化

    系统规格 Intel Xeon E7 v3 处理器 4 插槽 16 核 插槽 2 线程 核心 Eigen 系列和 C 的使用 以下是代码片段的串行实现 Eigen VectorXd get Row const int j const int
  • 从 C# 使用 Odbc 调用 Oracle 包函数

    我在 Oracle 包中定义了一个函数 CREATE OR REPLACE PACKAGE BODY TESTUSER TESTPKG as FUNCTION testfunc n IN NUMBER RETURN NUMBER as be
  • 不可变类与结构

    以下是类与 C 中的结构的唯一区别 如果我错了 请纠正我 类变量是引用 而结构变量是值 因此在赋值和参数传递中复制结构的整个值 类变量是存储在堆栈上的指针 指向堆上的内存 而结构变量作为值存储在堆上 假设我有一个不可变的结构 该结构的字段一
  • memcpy/memmove 到联合成员,这是否设置“活动”成员?

    重要说明 一些评论者似乎认为我是从工会抄袭的 仔细看memcpy 它从普通旧地址复制uint32 t 它不包含在联合中 另外 我正在复制 通过memcpy 到工会的特定成员 u a16 or u x in a union 不直接到整个联盟本
  • C++ - 多维数组

    处理多维数组时 是否可以为数组分配两种不同的变量类型 例如你有数组int example i j 有可能吗i and j是两种完全不同的变量类型 例如 int 和 string 听起来您正在寻找 std vector
  • Oauth2中如何同时撤销RefreshToken和使AccessToken失效

    我正在使用 Owin Oauth2 授权和资源服务器相同 开发单页面应用程序 AngularJS Net MVC Json Rest API 的身份验证流程 我选择了 Bearer Token 路由而不是传统的 cookie session
  • 比较:接口方法、虚方法、抽象方法

    它们各自的优点和缺点是什么 接口方法 虚拟方法 抽象方法 什么时候应该选择什么 做出这一决定时应牢记哪些要点 虚拟和抽象几乎是一样的 虚方法在基类中有一个实现 可以选择重写 而抽象方法则没有 并且must在子类中被覆盖 否则它们是相同的 在
  • C++ 对象用 new 创建,用 free() 销毁;这有多糟糕?

    我正在修改一个相对较大的 C 程序 不幸的是 并不总是清楚我之前的人使用的是 C 还是 C 语法 这是在一所大学的电气工程系 我们 EE 总是想用 C 来做所有事情 不幸的是 在这种情况下 人们实际上可以逃脱惩罚 但是 如果有人创建一个对象
  • 如何解压 msgpack 文件?

    我正在将 msgpack 编码的数据写入文件 在编写时 我只是使用 C API 的 fbuffer 如 我为示例删除了所有错误处理 FILE fp fopen filename ab msgpack packer pk msgpack pa
  • C++:为什么 numeric_limits 对它不知道的类型起作用?

    我创建了自己的类型 没有任何比较器 也没有专门化std numeric limits 尽管如此 由于某种原因 std numeric limits
  • C++:二叉树所有节点值的总和

    我正在准备面试 我被一个二叉树问题困住了 我们如何计算二叉树所有节点中存在的值的总和 优雅的递归解决方案 伪代码 def sum node if node NULL return 0 return node gt value sum nod
  • 没有“对 *this”功能的右值引用的解决方法

    我有一个围绕可移动对象的代理容器类 并希望代理能够隐式生成对底层对象的右值引用 但仅当代理本身被移动时 我相信我将能够按照提案 n2439 实施此行为 将移动语义扩展到 this http www open std org jtc1 sc2

随机推荐

  • 如何保持Javascript数组排序,而不对其进行排序

    我有一个 Node js 应用程序 我必须经常执行以下操作 检查特定数组是否已包含特定元素 如果元素确实存在 则更新它 如果元素不存在 则将其推入数组 然后使用下划线 sortBy对其进行排序 为了检查该元素是否已存在于数组中 我使用这个二
  • 资源解释为样式表但使用 mime 类型文本普通问题进行传输?

    我正在 Apache 2 2 中工作 我的本地主机打开了我的网页 但没有应用 CSS 也没有加载背景图像 我不知道为什么 使用 Chrome 开发者工具时 我收到以下警告 resource interpreted as stylesheet
  • Delphi 7 到 Delphi XE2 .res 文件问题

    当我在 Delphi XE2 中打开 Delphi 7 项目并打开项目选项时 出现错误 Unable to set Icon Cannot open file AppName Icon ico The system cannot find
  • 在深度嵌套的目录树中定义子项目

    如何在嵌套目录树中定义子项目 其中子项目文件夹不是根项目的直接子项目 root lala A lulu B 现在我想将 A 和 B 添加为子项目 如果我做 settings gradle include lala A lulu B 然后 l
  • AFNetworking SSL 固定过期证书

    如果 iOS 应用程序使用 ssl pinning 如何更新过期的 ssl 证书 似乎只有应用程序更新才能更新证书 但不更新应用程序的用户将不会收到此更新 关键是要理解可能的值 https github com AFNetworking A
  • 如何在文档中嵌入作用域 html (css)

    我需要能够将从远程 api 获取的 HTML 片段 嵌套元素和 CSS 嵌入到我的文档中 这样它们的 CSS 就不会影响我的整个文档 我需要获取 随机 gmail 消息 HTML 并将它们嵌入到我的网站中 问题是大多数消息都有 CSS 标签
  • ES6 中的二维数组

    长话短说 我正在寻找一种使用 ES6 创建和填充 2D 数组的方法 以避免for循环 创建的数组应包含全 0 我尝试了很多不同的方法 所以我无法发布所有这些方法 var r c 5 5 var m Array r fill Array c
  • 如何阻止 Visual Studio“总是”检查解决方案文件?

    显然没有任何原因 每次我打开解决方案时 Visual Studio 都会检查 sln 文件 如果我将它与以前的版本进行比较 没有任何变化 但这确实令人沮丧 因为每个人都检查了解决方案 我使用的是 VS 2008 和 TFS 2008 都是
  • IOS UIImageView 显示为黑色背景

    所以我有这个可扩展的函数UIImages 我用它来初始化UIImageView带有图像 我的问题是 当显示图像时 它周围总是有一个黑色矩形 尽管图像是背景完全透明的 png 这是缩放方法以及初始化UIImageView UIImage im
  • AngularJS 错误:缩小后的 $injector:modulerr

    嘿伙计们我收到一个错误Error injector modulerr当我缩小 Angular JS 1 应用程序时 到目前为止 我已经研究过这是我调用依赖项的方式HomeController但是我不确定我可能哪里出错了 我注意到这里有一些预
  • JavaScript 括号将原始类型转换为对象

    如果数字是原始类型 为什么我可以这样做 gt 12345 toString 12345 括号是将原始类型转换为Number 不 括号只是让解析器理解 不是小数点 12345 toString 也会起作用 每当您访问原始数字的属性时 原始数字
  • 如何在 scrapy pipelines.py 文件中导入 django 模型

    我正在尝试在 pipelines py 中导入一个 django 应用程序的模型 以使用 django orm 保存数据 我在第一个涉及的 django 应用程序 app1 中创建了一个 scrapy 项目 scrapy project 顺
  • 如何更改 MDI 子窗口图标?

    看下图 我已经创建了Sub Window动态地 我尝试使用setWindowIcon函数如下 mdiWindows gt setWindowIcon QIcon icon ico 但效果不佳 另请参阅以下代码 MDI 窗口创建 QWidge
  • 如何使用 Google Apps 脚本显示 Google Drive 图像?

    如果我使用 Google 教程页面中的以下内容来加载图像 则效果很好 第一个 Google 涂鸦 app add app createImage http www google com logos googleburn jpg 但如果我尝试
  • 在控制器中访问另一个 CakePHP 模型的最佳方法是什么?

    假设我有两个这样的控制器Table1sController and Table2sController 对应型号 Table1sModel Table2sModel In the Table1sController 我懂了 this gt
  • 在本机 iPhone 应用程序中的 UIWebView 中使用 InnerHTML 是否存在错误?

    我有一个相当大的 HTML JS CSS 应用程序 在 iPhone 上使用 Safari 作为 Web 应用程序运行时效果非常好 当在本机 iPhone 应用程序中的 UIWebView 中运行相同的应用程序时 在 jQuery 中调用创
  • Vim,如何自动删除“_”的空行?

    怎样才能让Vim总是删除内容到 当我们删除空行时 N dd or d motion EDIT1 例如 我写过 Hello 某处 然后用yy 然后我将光标移动到其他地方 删除一些空白行N dd到 而没有明确指示寄存器 然后我可以走一条正确的线
  • (撰写)Common Lisp

    我们在 P Graham 的 ANSI Common Lisp 第 110 页 中找到了这个函数构建器来实现组合 参数是 n gt 0 带引号的函数名称 我不完全理解它 所以我将在这里引用代码并在下面指出我的问题 defun compose
  • 如何使用 Ionic 4 检测平台

    如何使用 Ionic 4 检测浏览器和移动网络平台 因为当我在桌面浏览器中尝试使用以下代码时 它没有落入 core 健康 状况 if this platform is core alert core platform else alert
  • 返回Task的接口的同步实现

    如同在同步代码中实现需要 Task 返回类型的接口 https stackoverflow com questions 26352034 implementing an interface that requires a task retu