加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

使用块的C#任务返回方法

发布时间:2020-12-15 23:33:39 所属栏目:百科 来源:网络整理
导读:在C#中,任务或任务 T方法是从using语句中返回的,是否存在任何未正确发生清理的风险,或者这是一种不良的做法?有什么问题因为它涉及使用块中变量的关闭? 考虑以下: public Taskstring GetAsync(string url){ using (var client = new HttpClient()) { retur
在C#中,任务或任务< T>方法是从using语句中返回的,是否存在任何未正确发生清理的风险,或者这是一种不良的做法?有什么问题因为它涉及使用块中变量的关闭?

考虑以下:

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

在上面的示例中,异步操作由client.GetStringAsync(url)表示,我只是返回Task< string>让消费者等待.客户端在使用中会发生什么情况 – 它是在等待或垃圾收集之前清理干净,还是导致其他问题?

在使用这样的语句的原因中使用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);
    }
}

有什么不同?

解决方法

使用第一种方法不起作用,客户端将在完成其工作之前进行处理,您必须使用第二或第三版.

第2版??和第3版之间没有实际差异,请根据您团队的风格使用.但是在第二版中字符串response = string.Empty;可以简化为字符串响应;如果所有代码路径都将覆盖它而不读取它,则没有理由为变量赋值.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读