我有一个StatefulService
,它在RunAsync()
方法中创建了一些任务(使用Task.Run()
),但没有等待它们。
我有一个奇怪的问题,当我尝试手动删除群集中的服务时,并且我处于VS的调试模式时,取消令牌值未设置为true,并且RunAsync()继续执行。然后,在群集用户界面中得到以下警告:
The api ireplicator.changerole(n) on node is stuck
是的,它被卡住了,但这仅仅是因为SF没有发送取消请求。
现在,最奇怪的事情是它不时发生,我无法追踪其原因。
如您所见,由于我正在调试RunAsync()
,并且没有卡住,所以根本没有收到取消请求。
有什么想法吗?
我正在创建的任务是否有可能导致它?我看不到如何运行,尽管如果删除了这些任务,则看起来运行正常。
即使任务正在阻塞,RunAsync()
也不会等待它们,应该将其取消,但是不会。
谢谢。
protected override async Task RunAsync(CancellationToken cancellationToken)
{
StateManagerHolder.Instance = StateManager;
while (true)
{
Task.Run(() => DoSomething(), cancellationToken);
await Task.Delay(45, cancellationToken);
}
}
答案 0 :(得分:0)
好吧,问题似乎出在我的一项使用IReliableDictionary存储状态的任务中,好像我注释掉了一样,它按预期工作了。
由于我不知道自己在做什么错(做像docs这样的简单交易),并且根据: https://github.com/Azure/service-fabric-issues/issues/1139
我决定将服务转换为无状态并使用Azure表。 当然我现在没有遇到这个问题!