在C#中,在
考虑以下内容:
using
语句内返回Task
或Task<T>
方法时,是否存在清理不正确的风险?这是一种不好的实践吗?在涉及using
块中变量的闭包时有哪些问题需要考虑?考虑以下内容:
public Task<string> GetAsync(string url)
{
using (var client = new HttpClient())
{
return client.GetStringAsync(url);
}
}
在上面的示例中,异步操作由 client.GetStringAsync(url)
表示,我只是返回该 Task<string>
给使用者进行 await
。当 client
在 using
中时会发生什么 - 它会在等待或垃圾回收之前被清理吗?还是会导致其他问题?
如果这样做,在 using
语句中使用 async
和 await
是否更好,为什么?
public async Task<string> GetAsync(string url)
{
string response = string.Empty;
using (var client = new HttpClient())
{
response = await client.GetStringAsync(url);
}
return response;
}
或者
public async Task<string> GetAsync(string url)
{
using (var client = new HttpClient())
{
return await client.GetStringAsync(url);
}
}
有什么区别吗?