Возьмите этот async
метод:Tail вызов асинхронной без ждать
public async Task<string> ReadStringFromUrlAsync(string url)
{
WebRequest request = WebRequest.Create(url);
WebResponse response = request.GetResponse();
Stream dataStream = response.GetResponseStream();
var reader = new StreamReader(dataStream);
return await reader.ReadToEndAsync();
}
Поскольку он возвращает результат другой задачи, я считаю, я могу избавиться от async
и await
:
public Task<string> ReadStringFromUrlAsync(string url)
{
WebRequest request = WebRequest.Create(url);
WebResponse response = request.GetResponse();
Stream dataStream = response.GetResponseStream();
var reader = new StreamReader(dataStream);
return reader.ReadToEndAsync();
}
Я заметил, что стек вызовов в случае исключения не укажет ReadStringFromUrlAsync
, есть ли какие-либо другие недостатки для удаления aysnc
/await
на хвостовых вызовах таким образом.
Как написано это нормально, но вы забыли распоряжаться этими ресурсами , Теперь вам нужно еще раз подождать. – usr
Хороший вопрос, я пришел к такому выводу давно, когда увидел, что в нашей базе кода есть избыточное ожидание. –
@usr спасибо за это, это метод, который я рефакторинг для 'async', и это полностью ускользнуло мое внимание. Это плохой пример для вопроса. Я не буду редактировать, потому что ответы ссылаются на него. Я думаю, давайте просто предположим, что в случае, когда я спрашиваю, что нет ничего, что должно быть устранено. – weston