问题:
我正在努力弄清楚如何为返回异步结果类型的函数建模。
示例:
type Get<'requestor,'item,'error> = 'requestor -> Async<Result<'item list,'error>>
注意:
直到我不得不编写依赖于F#函数类型的C#代码时,我才遇到这个问题。因此,我的C#代码正在执行IO,因此想使用Task类型。
尝试失败:
我想编写惯用的F#代码,并且不想在我的F#签名中撒满C#任务类型。
例如,我不想这样做:
type Get<'requestor,'item,'error> = 'requestor -> Task<Result<'item list,'error>>
我的挑战是我还没有想办法返回:
Async<Result<'item list,'error>>
这是我失败的一个例子:
let someLongRunningOperation = async { Ok [1] } // Returns Async<unit> instead of AsyncResult
结论:
最后,我如何返回引用以下失败示例的异步结果类型:
let someLongRunningOperation = async { Ok [1] }
答案 0 :(得分:7)
在计算表达式中,您需要使用return
关键字将值包装为该CE的类型。所以这个:
let someLongRunningOperation = async { Ok [1] }
应更正为此:
let someLongRunningOperation = async { return Ok [1] }
然后您将返回一个Async<Result>
。