gpt4 book ai didi

c# - RoleEnvironment.RequestRecycle() 不触发重新启动

转载 作者:太空宇宙 更新时间:2023-11-03 21:24:48 25 4
gpt4 key购买 nike

我们有一个具有多个实例的 Azure 云服务。这些实例可能会陷入致命状态,此时我们希望触发实例重新启动。

我们尝试过调用:

RoleEnvironment.RequestRecycle();

但根据 Azure 门户,该实例继续保持正常运行,没有任何重新启动的迹象。

我们甚至尝试通过发出以下命令将其置于错误状态:

Environment.FailFast("Failed.");

但这似乎也不会触发重新启动(同样,至少根据 Azure 门户)。

我们是否应该在 Azure 门户中看到这种情况发生?如果是,什么可能会阻止它重新启动?

更多详情

基本上,作为我们逻辑的一部分,我们正在旋转一个单独的线程来执行一些繁重的处理,并且此处理有一个超时,此时我们需要重新启动以终止线程并释放所有消耗的资源。我知道理想情况下我们会对线程进行更正确的处理并取消它,但目前这不是一个选项。所以我们只想重新启动。

简化版本看起来像这样:

var mainTask = Task.Run(() => DoHeavyProcessing());
var timeoutTask = Task.Delay(TimeSpan.FromMinutes(10));

if (Task.WaitAny(mainTask, timeoutTask) == 1)
{
RoleEnvironment.RequestRecycle();
}

但是,RequestRecycle() 似乎并没有触发重新启动。

最佳答案

因此,我们对此进行了一些进一步的测试,并发现 - 至少根据我们所经历的情况 - RequestRecyle 确实不会重新启动云服务VM,而只是回收 VM 内的角色实例。

Environment.FailFast 也是如此——它正在回收角色实例,而不是完全重新启动。

因此,最终效果是相同的,甚至更好一些,因为这可能比完全重新启动要快一些。

对于那些寻求完全重新启动的人(在我们的例子中没有必要),可能需要关闭 shell:

Process.Start("shutdown","/r /t 0");

关于c# - RoleEnvironment.RequestRecycle() 不触发重新启动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27845469/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com