在 TPL 中返回空静态任务是一种不好的做法吗?

2024-04-11

在某些情况下,我想有条件地运行任务。我使用某种扩展方法,如下所示:

public static class MyTaskExtension{
  private static Task theEmptyTask = Task.Factory.StartNew(() => {}); //This is the question

  public static Task ContinueWith(this Task task, Task continuationTask, Func<bool> condition)
  {
    if condition(){
       ... do the work
    }
    return theEmptyTask;
  }
}

我的期望是 theEmptyTask 已经完成,所以基本上如果我不想做任何事情,我只是返回这个任务,而不是 null 或一个新的空任务。

我有一种感觉,这种方法应该存在一些问题。有人能看到吗?


在某些情况下,返回已完成的任务是完全可以接受的。这不是特别经常做的事情,但它已经完成了。

仅使用单个静态完成的任务也没有任何问题。没有必要有一大堆完全相同的不同任务,因为一旦它们完成,如果没有结果,重用它们并没有什么问题。

请注意,如果您想返回已完成的任务,您可以使用Task.FromResult生成一个比您现在正在做的开销更少的方法,因为您不会创建一个空方法,调度它,等待它启动,然后立即完成它。刚回来Task.FromResult(false)会给你一个已经完成的任务。

如果您使用 .NET 4.0,您可以轻松创建自己的 FromResult:

public static Task FromResult<T>(T result)
{
    var tcs = new TaskCompletionSource<T>();
    tcs.SetResult(result);
    return tcs.Task;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 TPL 中返回空静态任务是一种不好的做法吗? 的相关文章

随机推荐

  • 正则表达式解析类似 Javascript 函数调用的语法

    我有以下数据可能性 fnname fnname value fnname value valueN 我需要一种方法用 javascript 正则表达式解析它以获得数组 fnname fnname value fnname value val
  • C#/.Net 中的缓存

    我想问你在 C 中实现缓存的最佳方法是什么 是否有可能使用给定的 NET 类或类似的东西 也许像字典这样的东西会删除一些条目 如果它变得太大 但是哪些条目不会被垃圾收集器删除呢 如果您使用 NET 4 或更高版本 则可以使用内存缓存 htt
  • 使用不同的应用程序对 git 中的 diff 输出进行着色

    我想用cdiff https pypi python org pypi cdiff使用 git 时对差异输出进行着色 我可以通过 cdiff 传递 git 命令的输出 但我想知道是否可以不必这样做 具体来说 当我使用git log p 当我
  • 在具有整数和字符变量的数据框上按行应用 FUN

    一个完全基本的问题 如果重复 请原谅我 set seed 1 df lt data frame id c a a b b a a sample 1 10 size 5 replace T b sample 1 10 size 5 repla
  • 在已安装应用程序的情况下运行 inno setup 时卸载

    我刚刚开始使用 inno setup 看起来效果很好 但是 当我运行已安装的应用程序的安装程序时 它会重新安装 我想给用户卸载 这可能吗 如果可以 该怎么做 具体来说 我为家庭作业编写了一个游戏 我使用 inno setup 制作了一个安装
  • 为什么 getCompatedStyle 不为父元素隐藏的元素返回 display:none ?

    根据这个问题 https stackoverflow com q 1169967 798371页面和接受的答案here https stackoverflow com q 4866229 798371 通过Javascript获取继承的CS
  • 更改货币符号或将其在 inputmask 货币中删除

    我在用着Robin Herbot 的 inputmask jquery 插件 https github com RobinHerbots jquery inputmask我想将默认货币符号 默认情况下为美元货币符号 更改为 PESO 货币符
  • 如何使用 PHP 下载 HTML?

    如何从 PHP 中的 URL 下载 HTML 文件 并下载所有依赖项 例如 CSS 和图像 并将它们作为文件存储到我的服务器 我的要求是不是太多了 最简单的方法是使用wget http en wikipedia org wiki Wget
  • 如何从 PHP 数组为下拉选择字段创建嵌套列表?

    我的问题与本主题中描述的问题非常相似从 PHP 数组创建下拉选择字段的嵌套列表 https stackoverflow com questions 14613546 create nested list from php array for
  • 如何使用 Android Studio Arctic Fox 将 Android 库 aar 作为模块导入?

    我曾经能够将库 aar 文件导入为模块 https stackoverflow com a 34919810 355456他们一直工作得很好 我不知道如何使用最新版本的 Android Studio Arctic Fox 来做到这一点 有人
  • 从数据框中删除所有值为 NA、NULL 或空的列[重复]

    这个问题在这里已经有答案了 我有一个数据框 其中一些值为 NULL 或空 我想remove these columns其中所有值 are NULL or empty 应从数据框中删除列 而不仅仅是隐藏列 我的头 df 看起来像 data V
  • nginx + python + websocket

    我如何配置nginx 最新版本 他们说它支持websockets 来支持WebSockets 我如何使用 python 来运行 websockets 连接 这就是我想要的 客户端使用 JavaScript 创建 WebSocket webs
  • 自动调整 NumPy 重新数组的大小

    我想创建 numpy recarray 的子类 当数据添加到当前长度之外的行时 它会自动调整大小 下面的代码完成了我想要的大部分功能 class autorecarray numpy recarray def init self args
  • p:对话框在验证失败时不隐藏

    我遇到无法关闭 PrimeFaces 对话框的问题 输入字段 用户名 是必需的
  • 单个 Django 模型,多个表?

    我在 MySQL 数据库中有几个临时表 它们共享相同的架构并具有动态名称 我将如何使用 Django 与这些表交互 单个模型可以从多个表中提取数据吗 我相信 您可以创建一个工厂函数 该函数会以动态方式返回您的模型db table http
  • Magento - 没有新闻通讯订阅和取消订阅事件

    为什么在客户或新闻通讯模块中的新闻通讯订阅 取消订阅过程中或周围没有调度任何事件 我目前面临的唯一选择是使用订阅者模型的重写来适应这里的一些代码 有没有其他人有一个好的替代方案 或者我错过了什么 我遇到了需要监听订阅 取消订阅事件的情况 我
  • 将连续整数分组在一起

    有以下代码 import sys ints 1 2 3 4 5 6 8 9 10 11 14 34 14 35 16 18 39 10 29 30 14 26 64 27 48 65 ints sort ints list set ints
  • 代理设计模式的使用

    我试图理解代理设计模式 但我无法理解代理设计模式的用法 我从维基百科得到了这个代码示例 interface Image public void displayImage on System A class RealImage impleme
  • 编辑器中的 Unity 模糊和像素化精灵(无像素艺术)

    我目前正在 Unity 中制作一款类似移动三消游戏 我已经在 Inkscape 中以 256x256 制作了宝石 用于匹配的对象 的所有图形 并以 90 dpi 导出它们 PNG 文件 也尝试使用 360 但没有任何改变 我的问题是 当我在
  • 在 TPL 中返回空静态任务是一种不好的做法吗?

    在某些情况下 我想有条件地运行任务 我使用某种扩展方法 如下所示 public static class MyTaskExtension private static Task theEmptyTask Task Factory Start