问题:
我正在努力弄清楚如何建模一个返回异步结果类型的函数.
例:
type Get<'requestor,'item,'error> = 'requestor -> Async<Result<'item list,'error>>
Run Code Online (Sandbox Code Playgroud)
注意:
在我必须编写依赖于F#函数类型的C#代码之前,我没有遇到过这个问题.因此,我的C#代码正在执行IO,因此想要使用Task类型.
尝试失败:
我想编写惯用的F#代码,并且不想在我的F#签名上撒上C#任务类型.
例如,我不想这样做:
type Get<'requestor,'item,'error> = 'requestor -> Task<Result<'item list,'error>>
Run Code Online (Sandbox Code Playgroud)
我的挑战是我还没有找到回归的方法:
Async<Result<'item list,'error>>
Run Code Online (Sandbox Code Playgroud)
这是我失败的一个例子:
let someLongRunningOperation = async { Ok [1] } // Returns Async<unit> instead of AsyncResult
Run Code Online (Sandbox Code Playgroud)
结论:
总之,如何返回引用以下失败示例的异步结果类型:
let someLongRunningOperation = async { Ok [1] }
Run Code Online (Sandbox Code Playgroud)
在计算表达式中,您需要使用return关键字来包装CE的类型中的值.所以这:
let someLongRunningOperation = async { Ok [1] }
Run Code Online (Sandbox Code Playgroud)
应该纠正于此:
let someLongRunningOperation = async { return Ok [1] }
Run Code Online (Sandbox Code Playgroud)
然后你会回来的Async<Result>.