C# 4.5 中的异步实现是否与 F# 2 中的线程使用方式完全相同?
问问题
766 次
1 回答
28
它们不一样。主要区别在于 C# 使用标准 .NETTask<T>
来表示异步计算,而 F# 使用自己的称为 .NET 的类型Async<T>
。
更具体地说,主要区别在于:
AC# async 方法创建一个
Task<T>
立即启动的(热任务模型),而 F# 创建一个必须显式启动的计算(生成器模型)。这意味着 F# 计算更易于组合(您可以编写更高级别的抽象)。在 F# 中,您还可以更好地控制计算是如何开始的。您可以使用
Async.Start
在后台Async.StartImmediate
启动它或在当前线程上启动它来启动计算。F# 异步工作流支持自动取消,因此您不必
CancellationToken
四处走动。也许第一点的另一个结果是 F# 异步工作流也支持尾递归,因此您可以编写递归工作流(这在 C# 中不容易工作,但 C# 不使用这种编程风格)
我写了一篇关于这个主题的更详细的文章:异步 C# 和 F#(II.):它们有何不同?
于 2012-10-03T12:54:01.270 回答