gpt4 book ai didi

C# 任务在using block中的返回方法

转载 作者:太空狗 更新时间:2023-10-29 22:30:10 24 4
gpt4 key购买 nike

C# 中,当一个 TaskTask<T>方法从 using 中返回声明是否存在清理不当的风险,或者这是一种不良做法?关于 using 中变量的关闭,有什么问题?阻止?

考虑以下几点:

public Task<string> GetAsync(string url)
{
using (var client = new HttpClient())
{
return client.GetStringAsync(url);
}
}

在上面的示例中,异步操作由 client.GetStringAsync(url) 表示,我只是返回 Task<string>为消费者await . client 发生了什么因为它在 using 中- 它是否在等待或垃圾收集之前得到清理,还是会导致其他问题?

使用async会更好吗?和 awaitusing的事业中像这样的陈述,如果是,为什么?

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);
}
}

有什么区别?

最佳答案

使用第一种方法是行不通的,client 会在它完成工作之前被处理掉,你必须使用第二或第三版本。

第 2 和第 3 版本之间没有实际区别,请使用适合您团队风格的那个。但是在第二个版本中 string response = string.Empty; 可以简化为 string response; 如果所有代码路径都会覆盖它,则没有理由为变量赋值没有阅读它。

关于C# 任务在using block中的返回方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38041243/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com