我必须处理速率限制的外部API。这就是说,如果我每秒调用API多次,我会得到一个例外。很酷的是,在异常内部,服务指定在发出另一个呼叫之前等待的秒数。
在我的情况下,我有一个observable,它使用像这样的结构
来对付该服务obs.SelectMany(i => service.CallAsync(i))
我怎么能知道RateLimitExceptions并将下一次调用延迟服务进入异常的秒数?
谢谢!
这是关于创建一个自动锚定的序列,另一个提出的重复问题是关于ROUTING +限制。虽然听起来很相似,但我并没有详细说明如何实现这一点,而在这里它只涉及Rx,没有涉及异步/等待。
编辑:我消耗的API是Microsoft的Cognitive Services Face API(https://dev.projectoxford.ai/docs/services/563879b61984550e40cbbe8d/operations/563879b61984550f30395236)
MS提供一个Nuget包( Microsoft.ProjectOxford.Face )和一个客户端(FaceApiClient),其所有操作都是async方法。例如:
Task<Microsoft.ProjectOxford.Face.Contract.Face[]> DetectAsync(string imageUrl, bool returnFaceId = true, bool returnFaceLandmarks = false, IEnumerable<FaceAttributeType> returnFaceAttributes = null);
异常是一个FaceAPIException,其中包含以下消息: &#34;超出了速率限制。请在26秒后重试。&#34;使用ErrorCode 429。
我的目标是拍摄一堆图像,检测每个图像中的面部并识别每个面部。
identifications = foreach image in Images
select detection in Detect(image)
select identification in Identify(detection)