Dav*_*ine 6 c# multithreading asynchronous async-await
在C#中,当一个Task或一个Task<T>方法从一个using语句中返回时,是否有任何不正确发生清理的风险,或者这是一个不好的做法?有什么问题,因为它涉及到using块中变量的关闭?
考虑以下:
public Task<string> GetAsync(string url)
{
using (var client = new HttpClient())
{
return client.GetStringAsync(url);
}
}
Run Code Online (Sandbox Code Playgroud)
在上面的例子中,异步操作由client.GetStringAsync(url),我只是Task<string>为消费者返回await.client它在a中发生了什么?它在using等待或垃圾收集之前是否被清理干净,还是会导致其他问题?
使用async和await在这样的using陈述的原因是否更好,如果是这样,为什么?
public async Task<string> GetAsync(string url)
{
string response = string.Empty;
using (var client = new HttpClient())
{
response = await client.GetStringAsync(url);
}
return response;
}
Run Code Online (Sandbox Code Playgroud)
要么
public async Task<string> GetAsync(string url)
{
using (var client = new HttpClient())
{
return await client.GetStringAsync(url);
}
}
Run Code Online (Sandbox Code Playgroud)
有什么不同?
Sco*_*ain 10
使用第一种方法不起作用,client在完成其工作之前将被处理,您必须使用第二或第三版.
第2版和第3版之间没有实际差异,请根据您团队的风格使用.但是在第二个版本string response = string.Empty;中可以简化为string response;如果所有代码路径都覆盖它而不读取它,则没有理由为变量赋值.
| 归档时间: |
|
| 查看次数: |
398 次 |
| 最近记录: |