问题标签 [polly]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
471 浏览

circuit-breaker - 访问打包的 Polly 策略

如果我包装了一些策略,是否可以从包装的策略中访问它们?

例子:

我想访问断路器以访问状态。

0 投票
1 回答
1613 浏览

polly - Polly 没有重试我的操作,我错过了什么?

在我的主要功能中,我创建了一个策略,如下所示:

当我执行此操作时,它总是在第一次运行时因函数“RunWithPolly”内部出现未处理的异常错误而失败。

0 投票
1 回答
2541 浏览

c# - C# Polly async-await:在重试之前等待用户确认

我正在为 iOS 和 Android 创建一个 Xamarin.Forms 应用程序,我在其中保存数据和本地 sqlite 数据库并在 Azure 服务器中联机。尽管我的应用程序需要 Internet 连接,并且它始终使用 Connectivity 插件进行检查,但我发现如果用户在请求中丢失单元接收,我有时会抛出异常。

我想要一个方法,我可以调用我所有的服务器请求,如果发生错误,它将重试请求。我还希望能够在重试之前要求用户输入。流程如下所示:

调用服务器 --> 异常捕获 --> 询问用户是否要重试 --> 重试

我找到了Polly包,它设置为在 C# 中处理 try/catch 重试。我目前的代码设置如下:

我的RefreshAuthorization()方法只是DisplayAlert在主线程的当前页面上显示一个:

当我调试它并切断我的互联网连接时。DisplayAlert从未显示。发生以下两种情况之一:

  1. 执行继续一遍又一遍地调用我的任务而没有完成
  2. 抛出ASystem.AggregateException并显示以下消息:

System.AggregateException: A Task's exception(s) were not observed either by Waiting on the Task or accessing its Exception property. As a result, the unobserved exception was rethrown by the finalizer thread. ---> System.Net.Http.HttpRequestException: An error occurred while sending the request

有谁知道如何在任务失败时成功暂停执行,并等待用户恢复?

更新:

在将调用DisplayAlert放在Device.BeginInvokeOnMainThread方法内部之后,我现在找到了绕过AggregateException. 但是,现在我遇到了另一个问题。

一旦我断开与互联网的连接,DisplayAlert它就会像预期的那样弹出。该程序等待我在完成该onRetry功能之前单击重试,以便RetryForeverAsync等待正常工作。问题是,如果我重新连接到互联网然后点击重试,它会一次又一次地失败。因此,即使我已连接到互联网,我仍会陷入被要求重新连接的无限循环。似乎这RetryForeverAsync只是重新抛出旧异常。

这是我打电话的方式runTask()

然后,我尝试了两种不同的调用 runTask 的方法,两者的结果都是在重新建立连接时重试失败:

或者:

0 投票
1 回答
542 浏览

polly - 重试前的操作

我有这个用例,对于某些错误,我需要在重试之前执行一个操作;否则,只需重试。

像这样的东西:

波莉可以做到这一点吗?

0 投票
1 回答
565 浏览

c# - 为什么 HttpClient 在后续使用 Polly 重试期间继续失败?

我有几种方法需要某种类型的互联网连接。如果连接失败,我想在失败前重试该方法一段时间。由于应用程序可以在等待成功响应的同时愉快地继续运行,因此我想异步执行此操作。

我正在使用Polly (5.3.1)来实现异步重试逻辑利用Tasks.

我通过禁用我的 Wi-Fi 并在重试窗口期间启用它来模拟断开连接。我期待在再次启用我的连接后,该方法在重试时会成功,我所看到的是该方法继续抛出 a HttpRequestException,就好像连接断开一样,直到重试完成,此时它抛出给调用者。
如果我在正常启用 Wi-Fi 的情况下启动该方法,它会立即成功。

为什么即使我的连接已启用并在后续重试期间正常工作,该方法仍会继续失败?

0 投票
1 回答
8281 浏览

c# - 使用最小起订量测试 Polly 重试策略

我正在尝试为 polly 编写一个单元测试,但看起来返回被缓存了。

方法 PostAsyncWithRetry:

测试:

不知道为什么,但看起来响应队列只是出队一次,这让我相信响应正在缓存。有谁知道谁在缓存响应,以及如何禁用它?

提前致谢!

0 投票
1 回答
268 浏览

polly - 执行块的最长时间............带有重试和中间延迟

我正在尝试编写策略。

我希望我的执行代码运行最长时间(示例中为 10 秒)。但我也想重试 x 次(样本中为 3 次)。并在失败之​​间暂停(示例中为 2 秒)。

我已经操纵我的存储过程来人为地延迟测试我的行为。

按照编码(如下代码),我的数据集在 30 秒后被填充(仅供参考:30 秒是存储过程中的硬编码值)。所以我的执行代码在 10 秒后没有退出......

理想情况下,我看到代码在前两次尝试 10 秒后退出,然后在第三次尝试中工作(因为存储过程不会人为延迟)。显然这不是真正的代码,但奇怪的存储过程给了我一种测试行为的方法。

我的存储过程:

我的 C#/Polly/数据库代码:

使用语句:

版本(packages.config)

附加:

在@mountain traveller 的精彩回答之后,我有一个工作示例:

重点是:

添加了 TimeoutStrategy.Pessimistic

并添加了 DbCommand.Cancel() 调用(或 SqlCommand.Cancel() 如果您不使用企业库)来终止(以前的)命令,否则它们将继续运行(不好)。

我还必须“反转”我的“Policy aggregatePolicy”。

Sql Profiler 结果

0 投票
1 回答
837 浏览

c# - Polly 框架的包装器,以便实现可以留在一个地方

我已经浏览了 Polly 框架的文档和示例,它真的很棒而且使用简单!

就我而言,我想将所有异常分为 3 种类型:临时、永久和日志。现在,我想要一段代码来负责通过使用 Polly 框架进行等待和重试来处理本质上是暂时的错误。

同样,如果某些东西本质上是永久性的(应该能够根据我们试图处理的异常知道它的类型例如:超时可以是临时的,但如果数据库凭据不正确,那么它是永久性的)然后我们可以发送电子邮件到技术支持人员。

现在,问题从这里开始,我如何使用接口或抽象类包装它,以便我的所有派生类都可以传递异常以及方法名称,它可以传递给我的新框架,它会做需要的。

任何指针都会有很大帮助!

0 投票
1 回答
1308 浏览

c# - 将方法包装到 func 中

我想围绕 Polly 框架创建一个通用包装器,以便可以有单个实现。为了实现它,我写了下面的代码

我在我的一种包装方法中使用上述方法

现在为了使用它,我编写了一个示例方法

直到最重要的是工作正常,但是一旦我开始在一个接受参数的方法中调用它,它就会抛出错误

0 投票
3 回答
487 浏览

elasticsearch - 通用策略类型返回

当 NEST 错误在 HttpCodeResponse 范围内并且我有以下通用策略时,我想重试:

但是当我尝试应用到 elasticClient 调用时,我收到错误: