Должны ли асин c вызовы методов объединяться во все вызовы методов? - PullRequest
2 голосов
/ 12 февраля 2020

Я пишу основной веб-API asp. net, который потребляет другой сторонний API и возвращает некоторый ответ JSON вызывающей стороне, которая будет клиентским веб-браузером. При написании моей реализации асинхронно, Visual Studio предлагает удалить asyn c await из моих следующих asyn c методов.

Я просто хотел получить разъяснение, что мне не нужно оборачивать эти два метод в asyn c await?

Ниже приведены методы:

public async Task<T> GetAsync<T>(string url)
{
    return  await GetResponse<T>(HttpMethod.GET,url);
}

public async Task<T> PostAsync<T>(string url, object payload)
{
    return await GetResponse<T>(HttpMethod.POST, url,payload);       
}

и следующий метод, который используется двумя вышеупомянутыми методами:

public async Task<T> GetResponse<T>(HttpMethod method,string url, object payload = null)
{
    System.Net.Http.HttpClient client = new System.Net.Http.HttpClient();

    HttpResponseMessage response;

    switch (method)
    {
        case HttpMethod.POST:
        {
            var content = new StringContent(payload.ToString(), Encoding.UTF8, "application/json");
            response = await client.PostAsync(url, content).ConfigureAwait(false);
            break;
        }
        case HttpMethod.GET:
        default:
            method = HttpMethod.GET;
            response = await client.GetAsync(url).ConfigureAwait(false);
            break;
    }


   var responseMessageString = await response.Content.ReadAsStringAsync().ConfigureAwait(false);

   _logger.LogInformation($"{method.ToString()} {method.ToString()} {Environment.NewLine} Response: {responseMessageString}");

    return Newtonsoft.Json.JsonConvert.DeserializeObject<T>(responseMessageString);
}

Ниже приводится предложение от Visual Studio:

enter image description here

Asyn c в объявлении метода и ожидание может быть исключено

1 Ответ

4 голосов
/ 12 февраля 2020

Я просто хотел получить разъяснение, что мне не нужно оборачивать эти два метода в asyn c await?

Это правильно. Вы можете доверять рекомендациям Visual Studio и ReSharper; они очень консервативны в своих рекомендациях.

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

Однако я бы не чувствовал, что у вас есть . Исключение ключевых слов дает (очень) незначительное увеличение производительности. Но если эти методы делают что-то нетривиальное - или будут изменены в будущем, чтобы сделать что-нибудь нетривиальное - тогда вы захотите оставить ключевые слова async / await.

...