Task 与 C# 中的异步委托?

2023-12-30

我有这个简单的方法:

static int Work (string s) { return s.Length; }

我可以用以下命令运行它:

Task<string> task = Task.Factory.StartNew<int> (() => Work ("lalala") );
...
int result = task.Result;

或者用这个:

Func<string, int> method = Work;
IAsyncResult myIasync= method.BeginInvoke ("lalala", null, null);
...
int result = method.EndInvoke (myIasync);
  • 它们都使用线程池线程。
  • 两者都等待执行完成(读取值时)
  • 两者都会向调用者重新抛出任何异常。

我应该什么时候使用每个?


第二种形式,使用IAsyncResult,明显老了,而且威力也小得多。Task<T>是在 .NET 4 中引入的,并且是现在表示异步操作的首选方式。使用起来要简单得多,特别是在支持“异步函数”的 C# 5 中,您可以以非阻塞方式等待任务(或其他异步操作)。

Using a Task而不是打电话BeginInvoke操作本身的执行方式可能不会有太大改变(尽管它在调度等方面为您提供了更多选择),但从想要“观察”操作的代码的角度来看,它产生了巨大的差异,请使用结果、等待多个任务、处理失败等。

如果您可以使用 C# 5(与 .NET 4.5 一起使用,或与 .NET 4 加上异步目标包一起使用),那么在管理异步操作时,它将使您的生活变得更加轻松。这是前进的方向:)

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

Task 与 C# 中的异步委托? 的相关文章

  • 将内置类型转换为向量

    我的 TcpClient 类接受vector
  • 为什么下面代码的输出是Thread[main,5,main]

    public class test1 public static void main String args TODO Auto generated method stub Thread t Thread currentThread Sys
  • XamlReader.Load 在后台线程中。是否可以?

    WPF 应用程序具有从单独的文件加载用户控件的操作 使用XamlReader Load method StreamReader mysr new StreamReader pathToFile DependencyObject rootOb
  • 读取文件特定行号的有效方法。 (奖励:Python 手册印刷错误)

    我有一个 100 GB 的文本文件 它是来自数据库的 BCP 转储 当我尝试导入它时BULK INSERT 我在第 219506324 行上收到一个神秘错误 在解决此问题之前 我想看看这一行 但可惜的是我最喜欢的方法 import line
  • 将 System.Windows.Input.KeyEventArgs 键转换为 char

    我需要将事件参数作为char 但是当我尝试转换 Key 枚举时 我得到的字母和符号与传入的字母和符号完全不同 如何正确地将密钥转换为字符 这是我尝试过的 ObserveKeyStroke this new ObervableKeyStrok
  • 存储来自其他程序的事件

    我想将其他应用程序的事件存储在我自己的应用程序中 事件示例 打开 最小化 Word 或打开文件时 这样的事可能吗 运行程序 http msdn microsoft com en us library ms813609 aspx and 打开
  • 回发或回调参数无效。使用“”启用事件验证

    当我从客户端回发页面时 出现以下错误 我有修改客户端 asp ListBox 的 JavaScript 代码 我们该如何解决这个问题 错误详细信息如下 Server Error in XXX Application Invalid post
  • ASP.NET:获取自 1970 年 1 月 1 日以来的毫秒数

    我有一个 ASP NET VB NET 日期 我试图获取自 1970 年 1 月 1 日以来的毫秒数 我尝试在 MSDN 中寻找方法 但找不到任何东西 有谁知道如何做到这一点 从 NET 4 6 开始 该方法ToUnixTimeMillis
  • .Net 4.0 应用程序在 64 位上比 32 位慢(分析和可能的解决方案)(应用程序正在使用 NetAdvantage)

    我们已经用 VB NET 4 0 VS2010 编写了 NET 应用程序 并使用设置为调试和发布配置的 AnyCPU 设置的所有项目进行编译 我们注意到 当此应用程序在 64 位环境中运行 在 Windows Server 2003 R2
  • C++:.bmp 到文件中的字节数组

    是的 我已经解决了与此相关的其他问题 但我发现它们没有太大帮助 他们提供了一些帮助 但我仍然有点困惑 所以这是我需要做的 我们有一个 132x65 的屏幕 我有一个 132x65 的 bmp 我想遍历 bmp 并将其分成小的 1x8 列以获
  • 上下文敏感与歧义

    我对上下文敏感性和歧义如何相互影响感到困惑 我认为正确的是 歧义 歧义语法会导致使用左推导或右推导构建多个解析树 所有可能的语法都是二义性的语言是二义性语言 例如 C 是一种不明确的语言 因为 x y 总是可以表示两个不同的事物 如下所述
  • 如何将自定义 JSON 文件添加到 IConfiguration 中?

    我正在使用 asp net Autofac 我正在尝试加载自定义 JSON 配置文件 并基于该文件创建 实例化 IConfiguration 实例 或者至少将我的文件包含到默认情况下构建的 IConfiguration asp net 中
  • 使用 Moq 使用内部构造函数模拟类型

    我正在尝试模拟 Microsoft Sync Framework 中的一个类 它只有一个内部构造函数 当我尝试以下操作时 var fullEnumerationContextMock new Mock
  • std::async 与重载函数

    可能的重复 std bind 重载解析 https stackoverflow com questions 4159487 stdbind overload resolution 考虑以下 C 示例 class A public int f
  • Server.MapPath - 给定的物理路径,预期的虚拟路径

    我正在使用这行代码 var files Directory GetFiles Server MapPath E ftproot sales 在文件夹中查找文件 但是我收到错误消息说 给定物理路径但虚拟路径 预期的 我对在 C 中使用 Sys
  • 如何在按钮单击时模拟按键 - Unity

    我对 Unity 中的脚本编写非常陌生 我正在尝试创建一个按钮 一旦单击它就需要模拟按下 F 键 要拾取一个项目 这是我当前的代码 在编写此代码之前我浏览了所有统一论坛 但找不到任何有效的东西 Code using System Colle
  • 有没有办法强制显示工具提示?

    我有一个验证字段的方法 如果无法验证 该字段将被清除并标记为红色 我还希望在框上方弹出一个工具提示 并向用户显示该值无效的消息 有没有办法做到这一点 并且可以控制工具提示显示的时间 我怎样才能让它自己弹出而不是鼠标悬停时弹出 If the
  • memset 未填充数组

    u32 iterations 5 u32 ecx u32 malloc sizeof u32 iterations memset ecx 0xBAADF00D sizeof u32 iterations printf 8X n ecx 0
  • 使用 GhostScript.NET 打印 PDF DPI 打印问题

    我在用GhostScript NET http ghostscriptnet codeplex com打印 PDF 当我以 96DPI 打印时 PDF 打印效果很好 但有点模糊 如果我尝试以 600DPI 打印文档 打印的页面会被极大地放大
  • 如何使用 Word Automation 获取页面范围

    如何使用办公自动化找到 Microsoft Word 中第 n 页的范围 似乎没有 getPageRange n 函数 并且不清楚它们是如何划分的 这就是您从 VBA 执行此操作的方法 转换为 Matlab COM 调用应该相当简单 Pub

随机推荐

  • 让我的 jQuery Ajax 脚本使用 CORS

    我构建了一个通过 AJAX 从外部网站读取数据的应用程序 它工作正常 但我在另一个中发现question https stackoverflow com a 10881561 773263如果我想使用 Webworks 或 Phonegap
  • 如何使用 shelf_web_socket 监听同一端口上的 http 和 ws 请求

    https pub dartlang org packages shelf web socket https pub dartlang org packages shelf web socket显示这个例子 import package s
  • 即使为空,复选框也会绑定(数据表控件)

    我需要将我的复选框绑定到某处 即使它为空 这样我就不会收到有关无效转换的错误 DataTable dt new DataTable dt Columns Add Name dt Columns Add DeleteFlag typeof b
  • 如何避免“IndexError:列表索引超出范围”错误?

    假设有一个名为 my list 和一个名为 的 int 变量list index 基本上 列表 my list 可能会随着时间而改变 因此 list index 可能会提高 IndexError list index out of rang
  • 如何使用 Dart 将剪贴板中的图像粘贴到 Canvas 元素上?

    我正在使用 Dart 开发个人白板 Chrome 应用程序 有时能够快速复制和粘贴图像 例如演示文稿中的幻灯片 图表或讲义 很有用 以便我可以在图像上添加注释在授课或进行演示时 如何将剪贴板上存储的图像粘贴到 Dart 中的画布元素上 实际
  • 无法启动浏览器进程!/usr/bin/chromium-browser'需要安装 chromium snap

    我正在尝试使用 puppeteer 的 api 它基本上有一个功能可以吸引我不和谐的用户 不太熟悉 puppeteer 所以介意我缺乏解释 做了一些研究并找到了一些解决方案 例如手动安装 chromium 这样做了 运行 puppeteer
  • 编译 gSOAP 客户端时未定义的引用

    我正在尝试使用 C 语言为 Web 服务创建客户端 我使用 wsdl2h 和soapcpp2 生成了 C 文件 在 netbeans 中 我将生成的文件和 gSOAP 包含目录添加到项目的包含目录中 我的主文件如下所示 include
  • 将 VSTO 部署到一个安装程序中

    我已经使用 ClickOnce 部署了 VSTO 应用程序 并得到了以下结果 这个安装程序工作得很好 然而 我真正想要的是一个安装程序 例如单个 exe 文件或单个 msi 文件 这样分发起来会很方便 我想我必须将所有 dll xml vs
  • 如何仅选择数值

    Table1 id 01 wire 02 steve ram123 03 从表1中我只想选择数值 它不应显示字母数字值 如 ram123 预期输出 01 02 03 如何查询这个条件 Try ISNUMERIC http msdn micr
  • C# 中 C++ const size_t 的等效项是什么?

    我正在尝试将一些 Ogre 代码转换为 C 版本 但遇到了一个问题 const size t nVertices 8 const size t vbufCount 3 2 nVertices float vertices vbufCount
  • 在Python中检查较长字符串中存在的模糊/近似子字符串?

    使用像leveinstein leveinstein或difflib 这样的算法 很容易找到近似匹配 gt gt gt import difflib gt gt gt difflib SequenceMatcher None amazing
  • 无法将 void* 动态转换为模板类

    我得到的确切错误是 无法将 object 类型为 void 动态转换为类型 class udDator int 源不是指向类的指针 这是在重写的运算符删除内部发生的 我正在尝试创建一个模板化内存管理类 它可以继承到任何其他类 通过引用管理内
  • Graphviz / PyGraphviz 中有向图的 NetworkX 风格弹簧模型布局

    NetworkX 主要用于图形分析 PyGraphviz 主要用于绘图 它们被设计为协同工作 然而 至少在一个方面 NetworkX 的图形绘制 通过 MatPlotLib 优于 PyGraphviz 的图形绘制 通过 Graphviz 即
  • Oracle 列别名中的双引号

    好吧 这是一个有点晦涩的问题 但希望有人能帮助我解决这个问题 我正在开发的系统构建了一个用于在存储过程中执行的动态 SQL 字符串 以及定义列别名的动态 SQL 的一部分 这些别名本身实际上是从用户生成的数据的另一个表中检索的值 因此 例如
  • 无限循环动画

    我正在尝试创建无限循环的动画 但遇到了一些麻烦 我正在使用这行代码 使我的视图 颤动 为红色 但是当我调用这一行时 它可以工作 但使我的用户界面无响应 UIView animateWithDuration 1 0f delay 0 0f o
  • 如何更改 Braintree 上的订阅期限?

    我想为我们使用 Braintree 的计费系统添加一些单元测试 但我不知道如何将订阅期从 1 个月 目前 Braintree 中的最小值 更改为 1 天 我等不及 1 个月来执行我的测试 有什么解决办法吗 我最近向 Braintree 支持
  • 如何检查哈希中是否存在特定密钥?

    我想检查会话哈希中是否存在 用户 密钥 我怎样才能做到这一点 请注意 我不想检查键的值是否为零 我只是想检查 用户 是否key存在 Hash s key 方法告诉您给定的密钥是否存在 session key user
  • 如果非最终字段的值可以更改,如何在匿名类中使用它们?

    我之前问过这个问题 但没有得到合适的答案 如果非最终字段的值可以更改 如何在匿名类中使用它们 class Foo private int i void bar i 10 Runnable runnable new Runnable publ
  • Fragment 变得可见时的侦听器

    我疯狂地尝试让 optionsMenu 为不同的视图提供不同的选项 如果在我的片段上调用 onResume 我可以让它工作 但事实并非如此 我有一个 SherlockFragmentActivity 它在 onCreate 期间添加一个 S
  • Task 与 C# 中的异步委托?

    我有这个简单的方法 static int Work string s return s Length 我可以用以下命令运行它 Task