Ton*_*ony 1 azure-service-fabric
我在有状态服务的 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
Run Code Online (Sandbox Code Playgroud)
} }
问题不是RunAsync运行时间太长,而是取消时间太长。
Service Fabric 有一个默认(硬编码)超时 4 秒,用于报告“缓慢”取消。那只是意味着在那之后它将产生一个健康事件(这在升级期间可能很重要,因为它会影响整个应用程序的健康状态)。
真正的问题是RunAsync. 删除服务或升级服务时,Service Fabric 将等待(可能永远)正常关闭。您的代码应该尊重CancellationToken传递给RunAsync方法的内容。例如,如果您有多个 IO 操作,请cancellationToken.ThrowIfCancellationRequested()在每个操作之后调用(尽可能)并将其传递给任何接受它作为参数的方法。
| 归档时间: |
|
| 查看次数: |
1316 次 |
| 最近记录: |