как рассчитать время запроса без ожидания - PullRequest
0 голосов
/ 28 мая 2020
public Task<HealthCheckResult> CheckHealthAsync(HealthCheckContext context, CancellationToken cancellationToken = default)
        {
            try
            {
                var sw = new Stopwatch();
                using var client = new HttpClient();

                var data = new StringContent(_json, Encoding.UTF8, "application/json");

                sw.Start();
                var result = client.PostAsync(_url, data);
                var respone = result.Result;
                sw.Stop();
                if (respone.StatusCode == System.Net.HttpStatusCode.OK)
                {
                    //compare with request time
                    if(sw.ElapsedMilliseconds < _threshold)
                    {
                        return Task.FromResult(HealthCheckResult.Healthy());
                    }
                    else
                    {
                        return Task.FromResult(HealthCheckResult.Degraded());
                    }
                }
                else
                {
                    return Task.FromResult(HealthCheckResult.Unhealthy());
                }
            }
            catch
            {
                return Task.FromResult(HealthCheckResult.Unhealthy());
            }
        }

так я рассчитываю время запроса в моем методе. Это верно? Я видел, как люди использовали await в других ответах, но я пишу это в Task<HealthCheckResult> CheckHealthAsync, и в нем говорится, что мне нужен метод asyn c, но он уже есть.

1 Ответ

1 голос
/ 28 мая 2020

Чтобы использовать ключевое слово await, вы также должны обозначить метод ключевым словом async в его сигнатуре.

Таким образом, ваш метод станет: public async Task<HealthCheckResult> CheckHealthAsync

И в вашем коде вам нужно дождаться вызова PostAsync без блокировки на .Result:

sw.Start();
var response = await client.PostAsync(_url, data);
sw.Stop();

EDIT:

После редактирования в вашем вопросе я вижу, что вы используете Task.FromResult(sth).

Если вы пометите метод как async, вы можете (и должны, чтобы скомпилировать) удалить все Task.FromResult и вместо этого просто вернуть HealthCheckResult.Healthy().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...