为什么有时 async 关键字不与 async 后缀的方法一起使用?

Dee*_*hra 1 c# async-await asp.net-core

我正在阅读有关 asp.net core 中的健康检查的信息。

我见过这段代码。

public class ExampleHealthCheck : IHealthCheck
{
    public Task<HealthCheckResult> CheckHealthAsync(
        HealthCheckContext context,
        CancellationToken cancellationToken = default(CancellationToken))
    {
        var healthCheckResultHealthy = true;

        if (healthCheckResultHealthy)
        {
            return Task.FromResult(
                HealthCheckResult.Healthy("A healthy result."));
        }

        return Task.FromResult(
            HealthCheckResult.Unhealthy("An unhealthy result."));
    }
}
Run Code Online (Sandbox Code Playgroud)

在上面的代码中,该方法CheckHealthAsync未标记为异步。它是否以这种方式支持同步和异步功能?

das*_*ght 6

这个答案有两个部分:

  • Async后缀用于满足IHealthCheck接口要求。它只是一种命名约定(尽管很重要),在语言本身中没有特殊含义。
  • async不使用,因为方法的实现不需要它(即它没有awaits)

请注意,该实现还使用Task.FromResult而不是直接返回值。这样做也是为了满足IHealthCheck接口的要求,该接口旨在允许异步实现。