【发布时间】:2016-06-26 17:33:18
【问题描述】:
在 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);
}
}
有什么区别?
【问题讨论】:
标签: c# multithreading asynchronous async-await