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

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(使用前将#替换为@)

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

随机推荐

  • 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