咨询区

  • Justin Lessard

我注意到在某些情况下,visual studio 经常推荐我这么做。


await using var disposable = new Disposable();
// Do something

来替代下面的这种写法


using var disposable = new Disposable();
// Do something

请问 usingawait using 到底有什么不同 ?或者说在使用上该怎么抉择?

回答区

  • Community

  1. 典型的同步 using

通常能调用 Dispose() 方法是因为这个对象实现了 IDisposable 接口,比如下面这样。


using var disposable = new Disposable();
// Do Something...

大家应该都知道,它等价于


IDisposable disposable = new Disposable();
try
{// Do Something...
}
finally
{disposable.Dispose();
}
  1. 新的异步using

之所以能使用 await 是因为一个对象使用了 IAsyncDisposable 接口并实现了 DisposeAsync() 方法,比如下面这样。


await using var disposable = new AsyncDisposable();
// Do Something...

它等价于


IAsyncDisposable disposable = new AsyncDisposable();
try
{// Do Something...
}
finally
{await disposable.DisposeAsync();
}

这个 IAsyncDisposable 接口是在 .NET Core 3.0.NET Standard 2.1 中加入的,接口签名如下:

//// Summary://     Provides a mechanism for releasing unmanaged resources asynchronously.public interface IAsyncDisposable{//// Summary://     Performs application-defined tasks associated with freeing, releasing, or resetting//     unmanaged resources asynchronously.//// Returns://     A task that represents the asynchronous dispose operation.ValueTask DisposeAsync();}

点评区

Dispose能够异步化是一个非常好的功能,毕竟它的作用就是用来释放非托管资源,也能看到以后的大趋势就是代码异步化,函数化????????????

NET问答: using 和 await using 有什么不同?相关推荐

  1. NET问答: 多个 await 和 Task.WaitAll 是等价的吗?

    咨询区 vidalsasoon: 我有下面两个方法: MethodA: 使用多个 await 方式 public async Task<IHttpActionResult> MethodA ...

  2. 多线程面试题_100多线程和Java并发面试问答–最终清单(PDF下载)

    多线程面试题 在这篇文章中,我们将提供有关多线程和Java并发面试问答的综合文章. 编者注:并发始终是开发人员的挑战,编写并发程序可能非常困难. 引入并发时,有很多事情可能会崩溃,并且系统的复杂性会大 ...

  3. 全网最详细中英文ChatGPT-GPT-4示例文档-从0到1快速入门AI智能问答应用场景——官网推荐的48种最佳应用场景(附python/node.js/curl命令源代码,小白也能学)

    从0到1快速入门AI智能问答应用场景 Introduce 简介 setting 设置 Prompt 提示 Sample response 回复样本 API request 接口请求 python接口请 ...

  4. Java 多线程 | 并发知识面试问答总结

    写在最前面 这个项目是从20年末就立好的 flag,经过几年的学习,回过头再去看很多知识点又有新的理解.所以趁着找实习的准备,结合以前的学习储备,创建一个主要针对应届生和初学者的 Java 开源知识项 ...

  5. 为何在 JavaScript 中使用顶层 await?

    原文地址:Why Should You Use Top-level Await in JavaScript?[1] 原文作者:Mahdhi Rezvi[2] 译者:Chor 作为一门非常灵活和强大的语 ...

  6. 手把手快速搭建智能语音客服——保险问答实践

    零基础快速搭建全流程智能语音客服系统--保险问答实践 1. 背景介绍 智能语音客服是智能客服的重要组成部分,在语音相关的人机交互场景中都有所应用,如智能外呼机器人,智能呼入机器人,虚拟人客服,数字员工 ...

  7. 分层条件关系网络在视频问答VideoQA中的应用:CVPR2020论文解析

    分层条件关系网络在视频问答VideoQA中的应用:CVPR2020论文解析 Hierarchical Conditional Relation Networks for Video Question ...

  8. setTimeout、setInterval、promise、async/await的顺序详解(多种情况,非常详细~)

    本文很长,列举的情况很多. 在阅读本文之前,如果您有充足的时间,请新建一个项目与本文一同实践. 每段代码都有对应的解释,但是自己动手尝试印象才会更深哦~ setInterval:表示多久执行一次,需要 ...

  9. Await, and UI, and deadlocks! Oh my!

    It's been awesome seeing the level of interest developers have had for the Async CTP and how much us ...

最新文章

  1. 对比学习系列论文CPCforHAR(一):Contrastive Predictive Coding for Human Activity Recognition
  2. 利用ASP控制WEB打印代码方法集合
  3. android activity view 区别,片段中onCreateView和onViewCreated之间的区别
  4. 1 游戏逻辑架构,Cocos2d-x游戏项目创建,HelloWorld项目创建,HelloWorld程序分析,(CCApplicationProtocol,CCApplication,AppDeleg
  5. html点击按钮获取列表数据传递到页面,随笔:ajax传递数组,layui父子页面传值,下来菜单赋值,父页面数据获取,表格数据替换为字符串...
  6. 电商入门_仓库管理系统wms
  7. 【ArcGIS教程】ArcGIS软件操作——地图配准
  8. linux云计算7 24,Linux云计算学习笔记day24
  9. 天池大数据竞赛——UI特征统计
  10. 【数据应用案例】用户画像与实践案例
  11. “黑客帝国”只是另一个幻想,但我们痴迷于此
  12. 美国绿卡基础知识:I-539和I-129表格的应用回复新帖
  13. 云诊所管理系统 云诊所管理软件 诊所管理软件 诊所管理系统
  14. 第一章 基础 (续 在IIS中寄宿服务)
  15. 携创教育:自考本科文凭有用吗?国家承认吗?
  16. 加密世界将迎来以太坊的“黄金十年”
  17. c语言 拷入pdf,怎么样才能把PDF文档从电脑拷到U盘
  18. OpenJudge NOI题库 1.5编程基础之循环控制
  19. 智慧武汉地理信息大数据中心上线 比百度地图更全
  20. END-TO-END OPTIMIZED IMAGE COMPRESSION 论文阅读笔记

热门文章

  1. 解决win7“该文件没有与之关联的程序来执行该操作”
  2. 安装SQLserver2008
  3. PHP 多维数组转json对象
  4. 《解密小米之互联网下的商业奇迹》
  5. Codeforces 746 G. New Roads
  6. UVa1607 poj1435 UVaLive1686 Gates
  7. Cachefiled
  8. 在应用程序中实现对NandFlash的操作
  9. 将字符串中的大写字母变成小写字母
  10. [设计模式]桥接模式