我有一个简单的方法,如下所示。如何将其转换为异步?
public string Smethod0(HttpWebRequest httpWebRequest0)
{
return new StreamReader(Smethod_1(httpWebRequest0).GetResponseStream(),
Encoding.UTF8, true).ReadToEnd();
}
答案 0 :(得分:2)
您可以使用异步/等待机制使其异步:
public async Task<string> Smethod0(HttpWebRequest httpWebRequest0)
{
return await new StreamReader(Smethod_1(httpWebRequest0).GetResponseStream(),
Encoding.UTF8, true).ReadToEndAsync();
}
还请参见我正在使用ReadToEndAsync()代替ReadToEnd()。
史蒂夫是对的,您必须先处置流,然后再返回结果。
答案 1 :(得分:0)
它始终取决于方法,但是在这种情况下,您已经有了返回异步结果的好方法,甚至没有使方法本身async
:
public Task<string> Smethod0(HttpWebRequest httpWebRequest0)
{
return new StreamReader(Smethod_1(httpWebRequest0).GetResponseStream(),
Encoding.UTF8, true).ReadToEndAsync();
}
将async
和await
添加到该方法将毫无意义,因为该方法本身不需要实际await
进行任何操作。这样做只会增加无用的等待时间。
如果您想在技术上更加正确,则还应该处置您的阅读器。您可以像这样改善您的原始实现:
public async Task<string> Smethod0(HttpWebRequest httpWebRequest0)
{
using (StreamReader reader = new StreamReader(
Smethod_1(httpWebRequest0).GetResponseStream(), Encoding.UTF8, true))
{
return await reader.ReadToEndAsync();
}
}
请注意,在这种情况下,有一个 指向等待结果的原因,因为您不希望在完成处理后就丢弃读取器。