首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是按顺序运行还是并行运行.NET Core6.0健康检查?

是按顺序运行还是并行运行.NET Core6.0健康检查?
EN

Stack Overflow用户
提问于 2022-07-28 11:49:24
回答 1查看 174关注 0票数 0

目前,我正试图在我的健康检查清单中诊断出需要时间的地方。我有多项健康检查,需要多个数据库。我还有一个系统定期调用健康检查端点,但是这个系统的超时时间非常短(~10秒)。

监视系统到达10秒超时后,它将取消请求。目前的健康检查,我只检查一个取消的要求在其中一个检查。这将导致应用程序抛出预期的异常。

我的问题是,正如标题所说,这些健康检查是一个接一个地进行,还是并行进行。我正在尝试诊断哪个DB导致延迟,并希望在取消检查之前检查它是否可能是一个检查。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-07-28 12:18:32

默认HealthCheckService并行运行所有检查:

代码语言:javascript
复制
foreach (var registration in registrations)
{
    tasks[index++] = Task.Run(() => RunCheckAsync(registration, cancellationToken), cancellationToken);
}

await Task.WhenAll(tasks).ConfigureAwait(false);

这并不意味着健康检查方法可以免费运行昂贵的阻塞代码。正在运行检查的线程(和内核)不能用于服务器请求。

不过,Xabaril 数据库健康检查完全异步:

代码语言:javascript
复制
    public async Task<HealthCheckResult> CheckHealthAsync(HealthCheckContext context, CancellationToken cancellationToken = default)
    {
        try
        {
            using (var connection = new SqlConnection(_connectionString))
            {
                _beforeOpenConnectionConfigurer?.Invoke(connection);

                await connection.OpenAsync(cancellationToken);
                using (var command = connection.CreateCommand())
                {
                    command.CommandText = _sql;
                    _ = await command.ExecuteScalarAsync(cancellationToken).ConfigureAwait(false);
                }
                return HealthCheckResult.Healthy();
            }
        }
        catch (Exception ex)
        {
            return new HealthCheckResult(context.Registration.FailureStatus, exception: ex);
        }
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73152411

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档