异步CTP和超时

Gre*_*egC 7 .net c# f# timeout async-ctp

我开始观看Jon Skeet关于C#Async CTP的演讲.在指定超时时,他结结巴巴.

来自F#的相当有限的曝光,有一种直观,集中且简单的方法来指定超时.所以,我想知道当前的事态是什么:C#Async CTP可以完成F#async块运行器所做的所有事情吗?是否有文件概述了差异和限制?


其他详细信息:在F#中,异步块运行器提供了指定以下内容的方法:

  1. 异常流程
  2. 超时流量
  3. 取消流程
  4. 以上三个功能的可扩展性

这是在F#中执行这些操作的一种方法: 参数顺序和管道右运算符

Jon*_*eet 3

我什至不记得提到过超时 - 但我会相信你的话:)

编写任务来实现超时相当容易:创建第二个“延迟”任务,然后等待该任务或原始任务完成。无论哪一个先到达,如果可行的话(使用取消令牌)取消另一个。新创建的任务将完成主操作的结果(如果成功),或者如果“延迟”首先完成则出现异常。

我没有看到AsyncCtpLibrary.dll 中直接支持的任何东西,但是您可以从提供的工具中相当轻松地构建。您可能需要查看“基于任务的异步模式概述”和“ TPL 数据流”文档,看看它们是否也涵盖了它。

  • @GregC:在 C# 异步中,这通常可以从简单的流程中清楚地看出 - 如果您创建两个任务然后等待它们,那么它将是并行的。如果您创建一个并等待它,然后创建另一个然后等待它,它们将串联。我怀疑这里的“关键”区别是基于任务的异步模式中的任务是“热”的,而 F# 异步模式中的 IIRC 任务是“冷”的。这肯定会改变事物的表达方式,如果您对一种方式非常满意,然后再看到另一种方式,那么这可能会令人困惑:) (2认同)