问题标签 [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.
circuit-breaker - 访问打包的 Polly 策略
如果我包装了一些策略,是否可以从包装的策略中访问它们?
例子:
我想访问断路器以访问状态。
polly - Polly 没有重试我的操作,我错过了什么?
在我的主要功能中,我创建了一个策略,如下所示:
当我执行此操作时,它总是在第一次运行时因函数“RunWithPolly”内部出现未处理的异常错误而失败。
c# - C# Polly async-await:在重试之前等待用户确认
我正在为 iOS 和 Android 创建一个 Xamarin.Forms 应用程序,我在其中保存数据和本地 sqlite 数据库并在 Azure 服务器中联机。尽管我的应用程序需要 Internet 连接,并且它始终使用 Connectivity 插件进行检查,但我发现如果用户在请求中丢失单元接收,我有时会抛出异常。
我想要一个方法,我可以调用我所有的服务器请求,如果发生错误,它将重试请求。我还希望能够在重试之前要求用户输入。流程如下所示:
调用服务器 --> 异常捕获 --> 询问用户是否要重试 --> 重试
我找到了Polly包,它设置为在 C# 中处理 try/catch 重试。我目前的代码设置如下:
我的RefreshAuthorization()
方法只是DisplayAlert
在主线程的当前页面上显示一个:
当我调试它并切断我的互联网连接时。DisplayAlert
从未显示。发生以下两种情况之一:
- 执行继续一遍又一遍地调用我的任务而没有完成
- 抛出A
System.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 的方法,两者的结果都是在重新建立连接时重试失败:
或者:
polly - 重试前的操作
我有这个用例,对于某些错误,我需要在重试之前执行一个操作;否则,只需重试。
像这样的东西:
波莉可以做到这一点吗?
c# - 为什么 HttpClient 在后续使用 Polly 重试期间继续失败?
我有几种方法需要某种类型的互联网连接。如果连接失败,我想在失败前重试该方法一段时间。由于应用程序可以在等待成功响应的同时愉快地继续运行,因此我想异步执行此操作。
我正在使用Polly (5.3.1)来实现异步重试逻辑利用Tasks
.
我通过禁用我的 Wi-Fi 并在重试窗口期间启用它来模拟断开连接。我期待在再次启用我的连接后,该方法在重试时会成功,我所看到的是该方法继续抛出 a HttpRequestException
,就好像连接断开一样,直到重试完成,此时它抛出给调用者。
如果我在正常启用 Wi-Fi 的情况下启动该方法,它会立即成功。
为什么即使我的连接已启用并在后续重试期间正常工作,该方法仍会继续失败?
c# - 使用最小起订量测试 Polly 重试策略
我正在尝试为 polly 编写一个单元测试,但看起来返回被缓存了。
方法 PostAsyncWithRetry:
测试:
不知道为什么,但看起来响应队列只是出队一次,这让我相信响应正在缓存。有谁知道谁在缓存响应,以及如何禁用它?
提前致谢!
polly - 执行块的最长时间............带有重试和中间延迟
我正在尝试编写策略。
我希望我的执行代码运行最长时间(示例中为 10 秒)。但我也想重试 x 次(样本中为 3 次)。并在失败之间暂停(示例中为 2 秒)。
我已经操纵我的存储过程来人为地延迟测试我的行为。
按照编码(如下代码),我的数据集在 30 秒后被填充(仅供参考:30 秒是存储过程中的硬编码值)。所以我的执行代码在 10 秒后没有退出......
理想情况下,我看到代码在前两次尝试 10 秒后退出,然后在第三次尝试中工作(因为存储过程不会人为延迟)。显然这不是真正的代码,但奇怪的存储过程给了我一种测试行为的方法。
我的存储过程:
我的 C#/Polly/数据库代码:
使用语句:
版本(packages.config)
附加:
在@mountain traveller 的精彩回答之后,我有一个工作示例:
重点是:
添加了 TimeoutStrategy.Pessimistic
并添加了 DbCommand.Cancel() 调用(或 SqlCommand.Cancel() 如果您不使用企业库)来终止(以前的)命令,否则它们将继续运行(不好)。
我还必须“反转”我的“Policy aggregatePolicy”。
c# - Polly 框架的包装器,以便实现可以留在一个地方
我已经浏览了 Polly 框架的文档和示例,它真的很棒而且使用简单!
就我而言,我想将所有异常分为 3 种类型:临时、永久和日志。现在,我想要一段代码来负责通过使用 Polly 框架进行等待和重试来处理本质上是暂时的错误。
同样,如果某些东西本质上是永久性的(应该能够根据我们试图处理的异常知道它的类型例如:超时可以是临时的,但如果数据库凭据不正确,那么它是永久性的)然后我们可以发送电子邮件到技术支持人员。
现在,问题从这里开始,我如何使用接口或抽象类包装它,以便我的所有派生类都可以传递异常以及方法名称,它可以传递给我的新框架,它会做需要的。
任何指针都会有很大帮助!
c# - 将方法包装到 func 中
我想围绕 Polly 框架创建一个通用包装器,以便可以有单个实现。为了实现它,我写了下面的代码
我在我的一种包装方法中使用上述方法
现在为了使用它,我编写了一个示例方法
直到最重要的是工作正常,但是一旦我开始在一个接受参数的方法中调用它,它就会抛出错误
elasticsearch - 通用策略类型返回
当 NEST 错误在 HttpCodeResponse 范围内并且我有以下通用策略时,我想重试:
但是当我尝试应用到 elasticClient 调用时,我收到错误: