Tom*_*cek 28
它们是不同的.主要区别在于C#使用标准.NET Task<T>来表示异步计算,而F#使用自己的类型调用Async<T>.
更具体地说,关键的区别是:
AC#async方法创建一个Task<T>立即启动的(热任务模型),而F#创建一个必须明确启动的计算(生成器模型).这意味着F#计算更容易编写(您可以编写更高级别的抽象).
在F#中,您还可以更好地控制计算的开始方式.您可以使用Async.Start在后台启动计算或Async.StartImmediate在当前线程上启动它来开始计算.
F#异步工作流程支持自动取消,因此您无需传递CancellationToken.
第一点的另一个结果可能是F#异步工作流也支持尾递归,因此您可以编写递归工作流(这在C#中不起作用,但C#不使用此编程样式)
我写了一篇关于这个主题的更详细的文章:异步C#和F#(II.):它们有什么不同?