Azure Durable Functions:WaitForInstanceCompletionAsync触发HttpClient超时异常
问题原因与解决方案
你遇到的100秒超时是DurableTask Grpc客户端内部HttpClient的默认超时,和你通过CancellationTokenSource设置的等待超时是两个独立的控制逻辑:你的取消令牌是上层的等待终止信号,但底层Grpc调用到Durable Task后端的请求本身有100秒的默认超时,到点就会触发异常,不受上层令牌影响。修改functionTimeout没用,因为那是函数自身的执行超时,和DurableTask客户端的Grpc通信超时无关。
解决步骤
方法1:通过host.json配置
在项目的host.json中添加DurableTask的Grpc超时配置,将HttpClient超时设置为和你的等待完成超时一致(比如10分钟):
{ "version": "2.0", "extensions": { "durableTask": { "grpc": { "httpClientTimeout": "00:10:00" } } } }
方法2:通过代码配置客户端
如果是在Program.cs中注册DurableTask客户端,可以直接在配置项中设置超时:
builder.Services.AddDurableTaskClient(options => { options.Grpc.HttpClientTimeout = TimeSpan.FromMinutes(10); });
额外说明
- 你观察到编排的活动会继续运行是正常的:
WaitForInstanceCompletionAsync的取消只是终止了当前函数对编排完成状态的等待操作,并不会主动终止已经启动的编排实例。如果需要在超时后终止编排,需要在捕获取消异常时调用taskClient.TerminateInstanceAsync(instanceId, "超时终止")。 - 本地环境中该配置同样生效,无需额外调整Grpc通信的localhost设置。
内容的提问来源于stack exchange,提问作者Rick Nijhuis
相关产品推荐
相关产品推荐

