Ваш метод «можно» переписать следующим образом:
public Task<string> GetAsync()
{
var httpClient = new HttpClient();
return httpClient.GetStringAsync("...");
}
, что позволяет избежать затрат на компиляцию метода async
и затем выполнить дорогостоящее переключение потока управления с await
. Функциональность все та же. Об этом говорит R # - вы можете опустить async/await
и избежать ненужных накладных расходов.
Тем не менее, я помещаю «can» в кавычки, так как ваш код вонючий, потому что, прежде всего, HttpClient
- это IDisposable
, поэтому вы должны утилизировать его после использования. Тогда async/await
будет необходимо:
public async Task<string> GetAsync()
{
using(var httpClient = new HttpClient())
{
return await httpClient.GetStringAsync("...");
}
}
так как это будет переведено в эквивалент
public async Task<string> GetAsync()
{
var httpClient = new HttpClient();
var result = await httpClient.GetStringAsync("...");
httpClient.Dispose();
return result;
}
Это тот, который вы обязательно должны исправить. Во-вторых, следует учитывать, что создание HttpClient
s может незаметно дестабилизировать ваше приложение, так как HttpClient
s следует использовать повторно. См. это сообщение в блоге и это сообщение SE Stack Exchange .