F#:如何包装非Async<'T>值?寻找Task.FromResult等效方法
F#同步值包装为Async<'T>的最优方式
你当前用async { return ... }的写法是可行的,但确实有更简洁的方式——F#的Async.result函数就是你要找的、等效于.NET Task.FromResult()的方法。
优化后的实现示例
type IdGeneratorImpl() = interface IdGenerator with member this.Generate(): Async<Id> = Async.result (System.Guid.NewGuid().ToString())
补充说明
Async.result会直接创建一个已完成状态的异步计算,内部逻辑就是同步返回指定值,和你原来的async块效果完全一致,但代码更紧凑。- 如果你的同步逻辑比较复杂(比如有多行代码、需要处理局部变量),保留
async { ... }块依然是合理的选择;但如果只是单纯包装单个同步值,Async.result是最优方案。
内容的提问来源于stack exchange,提问作者Overlord Zurg
相关产品推荐
相关产品推荐

