ymp*_*tor 3 concurrency f# asynchronous
我有一个像这样的C#API:
Task<T> Foo(serverUri)
Run Code Online (Sandbox Code Playgroud)
假设我有4个可能的服务器.我想实现一个将返回DiscUnionBar类型的函数:
type DiscUnionBar of T =
Safe of T | Weak of T | ConnectionError
Run Code Online (Sandbox Code Playgroud)
实施将具有以下要求:
考虑到我不能使用F#的Async并且必须坚持使用C#的Task任务,这很容易吗?我在这一点上有点失落.
除非是你不能使用的原因Async
随时随地在你的代码,你唯一的限制就是Foo
必须返回一个Task
,你应该没有问题转换Task
与调用产生Foo
一个Async
与Async.AwaitTask
.
这样你就可以使用F#的异步计算表达式构建逻辑,就像Foo
返回一样Async
let simpleComputation serverUri = async {
let! fooResult = Foo(serverUri) |> Async.AwaitTask
(* here you can work with the T returned by Foo's task *)
}
Run Code Online (Sandbox Code Playgroud)
我也有很好的FSharp.Control.FusionTasks
库经验,它允许你Task
直接在异步计算表达式中使用,而不必AwaitTask
显式调用,并且通常有助于异步/任务互操作.虽然有些人可能不喜欢它试图隐藏任务.
归档时间: |
|
查看次数: |
130 次 |
最近记录: |