增加 RunAsync 的超时
Increase timeout for RunAsync
我正在有状态服务的 RunAsync 方法中创建多个服务总线客户端。
该方法在开发环境中运行时超过允许的4秒,应用程序无法启动。
它失败了,因为我的开发机器和 Azure 之间似乎存在延迟。
我在泰国。 Azure 位于美国中南部。
能否在我的开发箱上本地增加 4000 毫秒超时?
我得到的错误是:
{
{
"Message": "RunAsync has been cancelled for a stateful service replica. The cancellation will be considered 'slow' if RunAsync does not halt execution within 4000 milliseconds.
"Level": "Informational",
"Keywords": "0x0000F00000000000",
"EventName": "StatefulRunAsyncCancellation",
"Payload": {
[...]
"slowCancellationTimeMillis": 4000.0
}
}
问题不是RunAsync
到运行的时间太长,而是取消的时间太长。
Service Fabric 对于 报告 "slow" 取消具有默认(硬编码)4 秒超时。这只是意味着在那之后它将产生一个健康事件(这在升级期间可能很重要,因为它会影响整个应用程序的健康状态)。
真正的问题是 RunAsync
的实施。当您删除服务或升级服务时,Service Fabric 将等待(可能永远)它正常关闭。您的代码应尊重传递给 RunAsync
方法的 CancellationToken
。例如,如果您有多个 IO 操作,请在每个操作之后调用 cancellationToken.ThrowIfCancellationRequested()
(只要可能)并将其传递给接受它作为参数的任何方法。
我正在有状态服务的 RunAsync 方法中创建多个服务总线客户端。
该方法在开发环境中运行时超过允许的4秒,应用程序无法启动。
它失败了,因为我的开发机器和 Azure 之间似乎存在延迟。
我在泰国。 Azure 位于美国中南部。
能否在我的开发箱上本地增加 4000 毫秒超时?
我得到的错误是:
{
{
"Message": "RunAsync has been cancelled for a stateful service replica. The cancellation will be considered 'slow' if RunAsync does not halt execution within 4000 milliseconds.
"Level": "Informational",
"Keywords": "0x0000F00000000000",
"EventName": "StatefulRunAsyncCancellation",
"Payload": {
[...]
"slowCancellationTimeMillis": 4000.0
} }
问题不是RunAsync
到运行的时间太长,而是取消的时间太长。
Service Fabric 对于 报告 "slow" 取消具有默认(硬编码)4 秒超时。这只是意味着在那之后它将产生一个健康事件(这在升级期间可能很重要,因为它会影响整个应用程序的健康状态)。
真正的问题是 RunAsync
的实施。当您删除服务或升级服务时,Service Fabric 将等待(可能永远)它正常关闭。您的代码应尊重传递给 RunAsync
方法的 CancellationToken
。例如,如果您有多个 IO 操作,请在每个操作之后调用 cancellationToken.ThrowIfCancellationRequested()
(只要可能)并将其传递给接受它作为参数的任何方法。