本文记录 FileStream 的 FlushAsync 方法在 .NET Framework 与 .NET Core 行为的不同

在使用 HID 设备进行 IO 通讯时,可以采用 FileStream 包装,从而方便进行异步读写,然而在写入完成时,期望调用 FlushAsync 方法将缓存内容刷入设备。然而调用 FlushAsync 时,在 .NET Framework 下的默认行为是将 flushToDisk 参数设置为 true 的值,这将会导致抛出操作对象不支持异常。在 .NET Core 下,如 Stephen Toub 大佬所说,当前没有一个系统提供了异步的 Flush 的支持,因此在 .NET Core 调用 FlushAsync 时,相当于设置为 flushToDisk 参数设置为 false 的刷入缓存到设备的行为

以上就是 FileStream 的 FlushAsync 方法在 .NET Framework 与 .NET Core 行为的不同。不同在于 .NET Framework 下默认将 flushToDisk 参数设置为 true 的值。而 .NET Core 下默认将 flushToDisk 参数设置为 false 的值

值得一说的是以上说的缓存其实有两层,一层是系统层提供的,调用 Flush 或 FlushAsync 配合 flushToDisk 参数设置为 true 的值,将让系统将内容刷入到设备。另一层是 dotnet 层的,调用 Flush 或 FlushAsync 将会让 dotnet 层的缓存刷入到系统里,由系统写入到 IO 设备

不过无论是 .NET Framework 还是 .NET Core 都没有给 FlushAsync 提供 flushToDisk 可选参数,也就是调用 FlushAsync 方法时,无法明确设置 flushToDisk 的值,需要依赖 CLR 的行为。这就是 FileStream 的 FlushAsync 方法在 .NET Framework 与 .NET Core 行为不同的原因

那是否会在后续版本,给 FlushAsync 加上 bool flushToDisk 重载?我在 GitHub 上提了此建议,参阅: Adding overloading FileStream.FlushAsync(bool flushToDisk) · Issue #64485 · dotnet/runtime

官方 Stephen Toub 大佬的决策是基于当前没有任何系统支持异步的 Flush 的支持,因此很长时间内都不会考虑给 FlushAsync 提供此重载。我也认同此决策

To my knowledge, there is no OS-level "flush to disk" functionality that's asynchronous, on either Linux, Windows, or macOS. The best we could do internally is the same you can do via public APIs: queue a work item to call Flush(true). We won't add such an API unless we can do meaningfully better than that.

FileStream 的 FlushAsync 方法在 .NET Framework 与 .NET Core 行为的不同的更多相关文章

  1. 开源且功能强大的C# 扩展方法类库Pure.Ext,包含1000+个拓展方法 (支持.Net Framework和.Net Core)

    先上地址 Github: https://github.com/purestackorg/pure.ext Gitee: https://gitee.com/purestack/pure.ext 扩展 ...

  2. 分别在.NET Framework 与 .NET Core 框架下 编写Windows Service(windows服务程序)

    前言,为什么会分别在两个框架下编写Windows Service,是因为最近在做区块链这块,使用的是NEO(小蚁区块链)的相关技术,NEO使用的是.net core 2.1,业务上需要写两个程序,一个 ...

  3. NET?.NET Framework?.NET Core?

    什么是.NET?什么是.NET Framework?什么是.NET Core? https://www.cnblogs.com/1996V/p/9037603.html 什么是.NET?什么是.NET ...

  4. .NET Framework和 .Net Core实现不一致的API之 `EmailAddressAttribute`

    .NET Framework和 .Net Core实现不一致的API之 EmailAddressAttribute Intro 现在我们的类库项目大多是 NETStandard2.0 项目,但是 ne ...

  5. .NET Framework VS .NET Core

    本文对应的原文来至 c-sharpcorner 的一篇文章,文末有链接.如有错误,还请指正. 前言 你会为你的下一个应用程序选择哪一种开发平台 - .NET Framework 或者 .NET Cor ...

  6. .net core系列之《.net平台历程介绍以及.net framework和.net core对比》

    一..Net平台的背景 1.2010之前 的PC时代的时候,互联网规模还不是特别庞大,以静态编译式语言为代表的JAVA和.Net没什么太大区别,.net以windows自居. 2.2010年以JAVA ...

  7. [转]浅谈 .NET Framework 与 .NET Core 的区别与联系

    本文转自:http://www.cnblogs.com/huchaoheng/p/6295688.html 2017到了,咱们学点啥啊,要想知道学点啥,先弄清.NET Framework 与 .NET ...

  8. 浅谈 .NET Framework 与 .NET Core 的区别与联系

    2017到了,咱们学点啥啊,要想知道学点啥,先弄清.NET Framework 与 .NET Core  这两个概念 .当今 net 生态系统如下: 从上面图中我们可以看到.net  主要分为三个部分 ...

  9. NET Framework、.NET Core、Xamarin

    认识.NET Core 上篇介绍了.NET 新的生态环境:包括.NET Framework..NET Core.Xamarin三驾马车 其中.NET Framework是基于Windows平台专属的开 ...

  10. .NetCore技术研究-一套代码同时支持.NET Framework和.NET Core

    在.NET Core的迁移过程中,我们将原有的.NET Framework代码迁移到.NET Core.如果线上只有一个小型的应用还好,迁移升级完成后,只需要维护.NET Core这个版本的代码. 但 ...

随机推荐

  1. 爬虫实战:探索XPath爬虫技巧之热榜新闻

    之前我们已经详细讨论了如何使用BeautifulSoup这个强大的工具来解析HTML页面,另外还介绍了利用在线工具来抓取HTTP请求以获取数据的方法.在今天的学习中,我们将继续探讨另一种常见的网络爬虫 ...

  2. C++ pieces

    standard lib fmax double fmax (double x, double y); float fmax (float x, float y); long double fmax ...

  3. 手机,IPAD查看eagle素材库

    把eagle素材库塞进手机里是一种什么样的体验?手机和ipad也能查看eagle素材库,随时随地查询浏览素材. 先看使用截图 实现原理: 在任意电脑,服务器或者nas中安装PicHome系统.在Pic ...

  4. SQL优化篇之-如何减少耗时查询的调用次数

    函数调用次数与性能 在查询语句中,如果 Select 子句调用了较为耗时的函数或子查询,需要特别考虑函数调用次数对于SQL整体执行时间的影响. 一.数据准备,SQL 语句 模拟较耗时的用户函数 确保执 ...

  5. 开启新时代,承接新使命,开放原子开源大赛OpenHarmony创新赛正式启航!

      开放原子开源大赛OpenHarmony创新赛,正式启动啦! "OpenHarmony创新赛"是开放原子全球开源大赛下开设的创新赛道,面向企业.个人.高校师生等广大开发者,聚焦O ...

  6. [易语言软件开源] [分享源码] 易语言D2D实现彩虹跑马灯

    注意使用了D2D1.1,部分win7用户可能用不了(win7以下也用不了) 不是单纯的一个彩虹条,是可以变幻的 其实也可以封装成GDI+的,但是GDI+占用比较大,就没有用 点击下载点击下载

  7. openGauss每日一练第6天

    学习地址 https://www.modb.pro/course/133 学习目标 学习 openGauss 创建模式.修改模式属性和删除模式 模式是一组数据库对象的集合,主要用于控制对数据库对象的访 ...

  8. HarmonyOS—使用Web组件加载页面

      页面加载是Web组件的基本功能.根据页面加载数据来源可以分为三种常用场景,包括加载网络页面.加载本地页面.加载HTML格式的富文本数据. 页面加载过程中,若涉及网络资源获取,需要配置ohos.pe ...

  9. jenkins 持续集成和交付——一个构件小栗子前置(三)

    前言 下面介绍构建一个小栗子. 在此之前有个小前提,就是已经安装好了git 服务器,用的是gogs,详细请看外篇. 正文 插件安装 首先你要安装一个git插件. 装完git插件后,我们还得安装一些gi ...

  10. 【最简单】禁用Chrome的“请停用以开发者模式运行的扩展程序”提示

    安装油猴插件后,每次打开Chrome浏览器后右上角都会提示,"请停用以开发者模式运行的扩展程序"的一个窗口,强迫症患者表示很烦. 小白的我试过网上多数方法,有些已经失效,有些都太麻 ...