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 次 |
最近记录: |