我在状态服务上的RunAsync方法中创建了许多Service Bus客户端。
该方法花费的时间超过了在开发环境中运行时允许的4秒,并且应用程序无法启动。
它因为我的开发机器和Azure之间的延迟似乎失败了。
我在泰国。 Azure位于美国中南部。
我的开发箱可以在本地增加4000毫秒的超时吗?
我得到的错误是:
$opts = [
'http' => [
'method' => 'POST',
'headers' => ['Authorization' => 'Bearer ' . $this->username . ':' . $computedHash]
]
];
$context = stream_context_create($opts);
$file = file_get_contents('http://www.hook.io/example/', false, $context);
} }
答案 0 :(得分:4)
问题不在于RunAsync
运行时间太长,而且取消需要很长时间。
Service Fabric有一个默认(硬编码)超时4秒报告"慢"取消。这只意味着在那之后它将产生一个健康事件(在升级期间可能很重要,因为它会影响整个应用程序的健康状态)。
真正的问题是RunAsync
的实施。当您删除服务或升级服务时,Service Fabric将等待(可能永远)它正常关闭。您的代码应该尊重传递给CancellationToken
方法的RunAsync
。例如,如果您有多个IO操作,请在每个操作之后调用cancellationToken.ThrowIfCancellationRequested()
(如果可能)并将其传递给任何接受它作为参数的方法。