如果有条件执行任务,异步方法应该做什么?

2023-12-19

假设我有一个等待任务的方法。该方法还返回一个任务。例如:

public async virtual Task Save(String path)
{
    if (NewWords.Any())
    {
        await FileManager.WriteDictionary(path, NewWords, true);
    }
    else await Task.Run(() => { });
}

Is the

else await Task.Run(() => { });

有必要留在这里还是我可以离开它?如果存在/不存在有什么区别吗?也许我应该采取其他方法?


这比不必要的情况更糟糕,因为您正在旋转一个线程而不执行任何操作,然后等到它完成执行任何操作之后。

什么都不做最简单的方法就是什么都不做。在一个async方法该方法仍然返回一个Task,但是那个Task已经完成了,所以有些事情await进一步向上将直接进入下一步需要做的事情:

public async virtual Task Save(String path)
{
    if (NewWords.Any())
    {
        await FileManager.WriteDictionary(path, NewWords, true);
    }
}

(另外,如果SaveAsync and WriteDictionaryAsync是这里的方法名称)。 如果不使用async(这里没有必要,但我知道这是一个例子)使用Task.CompletedTask:

public virtual Task Save(String path)
{
    if (NewWords.Any())
    {
        return FileManager.WriteDictionary(path, NewWords, true);
    }
    return Task.CompletedTask;
}

如果您正在针对 4.6 之前的框架进行编码,因此没有CompletedTask可用,那么Task.Delay(0)很有用,因为Delay特殊情况的值0返回缓存的已完成任务(事实上,与CompletedTask返回):

public virtual Task Save(String path)
{
    if (NewWords.Any())
    {
        return FileManager.WriteDictionary(path, NewWords, true);
    }
    return Task.Delay(0);
}

但 4.6 的方式更清楚地表达了您的意图,而不是依赖于实现的怪癖。

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

如果有条件执行任务,异步方法应该做什么? 的相关文章

  • 如何在 C++ 中的文件末尾添加数据?

    我已按照网上的说明进行操作 此代码应该将输入添加到文件 数据库 的末尾 但当我检查时 数据会覆盖现有数据 请帮忙 这是我的代码 int main string name string address string handphone cou
  • 用 C++ 进行服装建模 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在编写一些软件 最终会绘制一个人体框架 可以配置各种参数 并且计划是在假人身上放置某种衣服 我研究
  • 使用 Unity 在构造函数中使用属性依赖注入

    好的 我在基类中定义了一个依赖属性 我尝试在其派生类的构造函数内部使用它 但这不起作用 该属性显示为 null Unity 在使用 container Resolve 解析实例后解析依赖属性 我的另一种选择是将 IUnityContaine
  • VB.NET 相当于 C# 属性简写吗?

    是否有与 C 等效的 VB NET public string FirstName get set 我知道你能做到 Public Property name As String Get Return name ToString End Ge
  • 使用Physics.Raycast 和Physics2D.Raycast 检测对象上的点击

    我的场景中有一个空的游戏对象 带有 2D 组件盒碰撞器 我将脚本附加到该游戏对象 void OnMouseDown Debug Log clic 但是当我点击我的游戏对象时 没有任何效果 你有什么想法 如何检测我的盒子碰撞器上的点击 使用光
  • 如何检查QProcess是否正确执行?

    QProcess process sdcompare QString command sdcompare QStringList args sdcompare command sdcompare diff args sdcompare lt
  • 如何为 C 分配的 numpy 数组注册析构函数?

    我想在 C C 中为 numpy 数组分配数字 并将它们作为 numpy 数组传递给 python 我可以做的PyArray SimpleNewFromData http docs scipy org doc numpy reference
  • 如何修复此错误“GDI+ 中发生一般错误”?

    从默认名称打开图像并以默认名称保存 覆盖它 我需要从 Image Default jpg 制作图形 将其放在 picturebox1 image 上并在 picurebox1 上绘制一些图形 它有效 这不是我的问题 但我无法保存 pictu
  • 单元测试一起运行时失败,单独运行时通过

    所以我的单元测试遇到了一些问题 我不能只是将它们复制并粘贴到这里 但我会尽力而为 问题似乎是 如果我一项一项地运行测试 一切都会按预期进行 但如果我告诉它一起运行测试 则 1 5 将通过 TestMethod public void Obj
  • 如何从 .resx 文件条目获取注释

    资源文件中的字符串有名称 值和注释 The ResXResourceReader类让我可以访问名称和值 有办法看评论吗 你应该能够得到Comment via ResXDataNode class http msdn microsoft co
  • C++:.bmp 到文件中的字节数组

    是的 我已经解决了与此相关的其他问题 但我发现它们没有太大帮助 他们提供了一些帮助 但我仍然有点困惑 所以这是我需要做的 我们有一个 132x65 的屏幕 我有一个 132x65 的 bmp 我想遍历 bmp 并将其分成小的 1x8 列以获
  • 如何使用 watin 中的 FileUploadDialogHandler 访问文件上传对话框

    我正在使用 IE8 和 watin 并尝试通过我的网页测试上传文件 我不能简单地使用 set 方法设置上传文件 例如 ie FileUpload Find ById someId Set C Desktop image jpg 因为上传文本
  • Visual Studio 中的测试单独成功,但一组失败

    当我在 Visual Studio 中单独运行测试时 它们都顺利通过 然而 当我同时运行所有这些时 有些通过 有些失败 我尝试在每个测试方法之间暂停 1 秒 但没有成功 有任何想法吗 在此先感谢您的帮助 你们可能有一些共享数据 检查正在使用
  • 私有模板函数

    我有一堂课 C h class C private template
  • HttpWebRequest 在第二次调用时超时

    为什么以下代码在第二次 及后续 运行时超时 代码挂在 using Stream objStream request GetResponse GetResponseStream 然后引发 WebException 表示请求已超时 我已经尝试过
  • C++ 密码屏蔽

    我正在编写一个代码来接收密码输入 下面是我的代码 程序运行良好 但问题是除了数字和字母字符之外的其他键也被读取 例如删除 插入等 我知道如何避免它吗 特q string pw char c while c 13 Loop until Ent
  • 编译时“strlen()”有效吗?

    有时需要将字符串的长度与常量进行比较 例如 if line length gt 2 Do something 但我试图避免在代码中使用 魔法 常量 通常我使用这样的代码 if line length gt strlen Do somethi
  • 当另一个线程可能设置共享布尔标志(最多一次)时,是否可以读取共享布尔标志而不锁定它?

    我希望我的线程能够更优雅地关闭 因此我尝试实现一个简单的信号机制 我不认为我想要一个完全事件驱动的线程 所以我有一个工作人员有一种方法可以使用关键部分优雅地停止它Monitor 相当于C lock我相信 绘图线程 h class Drawi
  • 防止在工厂方法之外实例化对象

    假设我有一个带有工厂方法的类 class A public static A newA Some code logging return new A 是否可以使用 a 来阻止此类对象的实例化new 那么工厂方法是创建对象实例的唯一方法吗 当
  • 如何正确使用 std::condition_variable?

    我很困惑conditions variables以及如何 安全 使用它们 在我的应用程序中 我有一个创建 gui 线程的类 但是当 gui 是由 gui 线程构造时 主线程需要等待 情况与下面的函数相同 主线程创建互斥体 锁和conditi

随机推荐

  • skel.js 框架/HTML5UP 模板 CSS 问题

    我是 skel js 框架的新手 遇到了一些问题 我从 HTML5UP net Zerofour 主题 下载了一个模板 并且已经为我的网站修改了所有内容 但是 CSS 没有在我的网站上正确显示无侧边栏 左侧边栏 pages 我包含以下链接
  • 用于提取部分文件路径的正则表达式

    我在 Impala 中使用正则表达式函数来查找文件路径中的文件夹名称 但它似乎没有给我正确的结果 我想从这个文件路径中解析出 一 this one path to hdfs 这是我使用的正则表达式 regexp extract filepa
  • 如何在 Angular 2 Webpack 中使用 WOW.js?

    我知道我们需要 wow js 的打字文件 但我在任何地方都找不到它 有没有其他解决方案可以将此外部js加载到webpack中 执行以下步骤 安装出口装载机 https www npmjs com package exports loader
  • 如何使用自定义比较器为三元组(“tuple”)声明/使用“unordered_set”?

    如何声明 使用unordered set对于三胞胎 tuple 使用自定义比较器 我需要存储三元组float 处理为tuple 在一组中检查潜在的重复项 因为它是关于float 我想使用常规比较 不起作用 因此需要自定义比较 这个最小的代码
  • 使用 Microsoft Web API 的 ODATA 真的是 REST 架构吗?

    我研究得越多ODATA 上的 Microsoft 框架 https www asp net web api overview odata support in aspnet web api我倾向于认为它不适合企业应用 该框架期望所有数据库都
  • 从app.js中减去代码

    为了解决一些与触摸相关的问题 我在 app js 中编写了一个脚本来重新打开并增强 EventDispatcher 该脚本相当长 并且污染了通常很干净的 app js 所以我想将我的脚本放在一个单独的文件中 然后以某种方式导入到 app j
  • 禁用 CallKit 中的“添加呼叫”选项

    有没有办法禁用添加呼叫选项Callkit当收到一个VoIP call 我找不到任何 api 来禁用此功能 但 WhatsApp 禁用了此功能 您需要同时设置supportsGrouping supportsUngrouping and su
  • 张量流“op”有什么作用?

    下面我创建了一个名为 optesting 的 tf 占位符 self center words tf placeholder tf int32 shape self batch size name op testing print Extr
  • 在 PHP 中检索 MySQL 全文搜索的匹配上下文(和安全性)

    我正在我的 MySQL 表 页面 上进行全文搜索 我正在显示与 标题 纯文本 VARCHAR 255 或 内容 html TEXT 中的关键字匹配的页面列表 当在 内容 字段中找到匹配项时 我想显示找到匹配项的代码片段 我不知道该怎么做 你
  • cntk中loss和metric是如何计算的

    我是 cntk 和 python 的新手 我创建了一个基于 TrainResNet CIFAR10 py 的 python 程序来训练 4736 个 64x64x3 图像并测试 4 个类别的 2180 个图像 训练 160 个 epoch
  • 为什么 TextInput 上的 onKeyPress 在 React Native (Android) 中不起作用?

    我正在使用 React Native 并在 Android 上进行测试 我已将 onKeyPress 添加到我的 TextInput 中 但我在模拟器中单击键盘并没有触发它 是的 我使用鼠标单击按键 有谁知道如何让 onKeyPress 工
  • 无法找到传入头 UIButton 的传出行头

    我仅在 iOS7 上因自动布局问题而崩溃 iOS8 有效 问题是 UIButton 指示 0x7b7780a0 不存在 当我查看recursiveDescription of the UIView 我该如何调查此事 从哪儿开始 edit 我
  • Bootstrap 轮播仅在第一张幻灯片中显示动画

    我的引导轮播有 4 张幻灯片 所有幻灯片都有动画图表 但动画仅在第一张幻灯片中可见 如何确保其余 3 张幻灯片的图表动画也能看到 Code
  • 如何通过uploadcare中的rest api删除文件

    我正在尝试使用 jquery ajax 删除 uploadcare Rest api 中的文件 这是我当前的 jquery 代码 ajax url http api uploadcare com files photoguid val ty
  • ASP.NET 5添加WCF服务参考

    在 Visual Studio 2015 预览版 预发行版 中 如何添加服务引用WCF服务 目前 这是一个相当复杂的过程 因为该工具似乎不太支持生成 WCF 客户端代码或从配置文件自动映射的方式 另外 正如 dotnetstep 指出的那样
  • 如何更改默认版权模板

    每当我在 xcode 中创建一个新文件时 它都会在文件顶部放置类似的内容 Copyright MyCompanyName 2008 All rights reserved 我怎样才能把它变成有用的东西 Update 在这里找到了答案 htt
  • 是否可以在 R Shiny 中动态设置小部件选项?

    作为一个最小的工作示例 An app with a datatable whose pagination option we can toggle with a button library shiny runApp list ui bas
  • 如何使用 d3.js 为线条添加动画?

    所以我的线从图表的一侧延伸到另一侧 但它并没有真正通过每个数据点进行动画处理 我认为我必须在某处添加一个循环 这是相关代码 任何帮助将不胜感激 assign start coordinates for each piece of data
  • 创建 AngularJS ACL 的最佳方法是什么? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我想与您 社区 分享我的问题 I use MEAN堆栈 所以我使用Node js with Express and AngularJS
  • 如果有条件执行任务,异步方法应该做什么?

    假设我有一个等待任务的方法 该方法还返回一个任务 例如 public async virtual Task Save String path if NewWords Any await FileManager WriteDictionary