【发布时间】:2017-07-10 16:27:19
【问题描述】:
我有一个这样的 C# API:
Task<T> Foo(serverUri)
假设我有 4 个可能的 serverUris。我想实现一个返回 DiscUnionBar 类型的函数:
type DiscUnionBar of T =
Safe of T | Weak of T | ConnectionError
实施将具有以下要求:
- 使用 3 个不同的 serverUris 对 Foo() 进行 3 次(最多)并发调用。
- 选择 2 个最快的成功响应。如果它们给出相同的结果 T1 和 T2(即 T1==T2),则停止执行并发请求并忽略/取消正在进行的请求并返回 T 的安全。如果 T1!=T2,继续执行更多请求(或查看响应) 直到找到两个相等的响应。
- 如果任何请求失败(抛出 ServerException),请尝试使用之前未请求过的 serverUri。
- 如果对所有 4 个服务器的所有请求都失败,则返回 ConnectionError。
- 如果只有 1 个请求成功,则返回 Weak of T。
鉴于我不能使用 F# 的 Async 并且必须坚持使用 C# 的 Task 用法,这是否容易做到?我对这个有点迷茫。
【问题讨论】:
-
有什么理由不能使用
async?
标签: asynchronous concurrency f#