FileStream 的 FlushAsync 方法在 .NET Framework 与 .NET Core 行为的不同
本文记录 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 行为的不同的更多相关文章
- 开源且功能强大的C# 扩展方法类库Pure.Ext,包含1000+个拓展方法 (支持.Net Framework和.Net Core)
先上地址 Github: https://github.com/purestackorg/pure.ext Gitee: https://gitee.com/purestack/pure.ext 扩展 ...
- 分别在.NET Framework 与 .NET Core 框架下 编写Windows Service(windows服务程序)
前言,为什么会分别在两个框架下编写Windows Service,是因为最近在做区块链这块,使用的是NEO(小蚁区块链)的相关技术,NEO使用的是.net core 2.1,业务上需要写两个程序,一个 ...
- NET?.NET Framework?.NET Core?
什么是.NET?什么是.NET Framework?什么是.NET Core? https://www.cnblogs.com/1996V/p/9037603.html 什么是.NET?什么是.NET ...
- .NET Framework和 .Net Core实现不一致的API之 `EmailAddressAttribute`
.NET Framework和 .Net Core实现不一致的API之 EmailAddressAttribute Intro 现在我们的类库项目大多是 NETStandard2.0 项目,但是 ne ...
- .NET Framework VS .NET Core
本文对应的原文来至 c-sharpcorner 的一篇文章,文末有链接.如有错误,还请指正. 前言 你会为你的下一个应用程序选择哪一种开发平台 - .NET Framework 或者 .NET Cor ...
- .net core系列之《.net平台历程介绍以及.net framework和.net core对比》
一..Net平台的背景 1.2010之前 的PC时代的时候,互联网规模还不是特别庞大,以静态编译式语言为代表的JAVA和.Net没什么太大区别,.net以windows自居. 2.2010年以JAVA ...
- [转]浅谈 .NET Framework 与 .NET Core 的区别与联系
本文转自:http://www.cnblogs.com/huchaoheng/p/6295688.html 2017到了,咱们学点啥啊,要想知道学点啥,先弄清.NET Framework 与 .NET ...
- 浅谈 .NET Framework 与 .NET Core 的区别与联系
2017到了,咱们学点啥啊,要想知道学点啥,先弄清.NET Framework 与 .NET Core 这两个概念 .当今 net 生态系统如下: 从上面图中我们可以看到.net 主要分为三个部分 ...
- NET Framework、.NET Core、Xamarin
认识.NET Core 上篇介绍了.NET 新的生态环境:包括.NET Framework..NET Core.Xamarin三驾马车 其中.NET Framework是基于Windows平台专属的开 ...
- .NetCore技术研究-一套代码同时支持.NET Framework和.NET Core
在.NET Core的迁移过程中,我们将原有的.NET Framework代码迁移到.NET Core.如果线上只有一个小型的应用还好,迁移升级完成后,只需要维护.NET Core这个版本的代码. 但 ...
随机推荐
- KingbaseES V8R6集群运维系列 -- 修改ssh通信为 sys_securecmdd 通信
一.适用于: 本文档使用于KingbaseES V008R006版本. 二.关于SYS_SECURECMDD: sys_securecmdd是KingbaseES集群自带的工具,集群监控.管理集群时通 ...
- archlinux运行appimage
1.cd进入appimage所在的目录 cd your_folder 2.赋予appimage运行权限 chmod +x your_file.appimage 3.运行appimage格式文件 ./y ...
- #线段树,欧拉函数#CF1114F Please, another Queries on Array?
题目 给一个长度为\(n\)的数组\(a\),\(q\)次询问 支持区间乘\(x\)以及求\(\varphi(\prod_{i=l}^ra_i)\) \(n\leq 4*10^5,q\leq 2*10 ...
- Jetty的server模块
启用server模块,执行如下命令: java -jar $JETTY_HOME/start.jar --add-modules=server 命令的输出,如下: INFO : server init ...
- OpenHarmony社区运营报告(2023年4月)
本月快讯 • 2023年4月9日,OpenAtom OpenHarmony(以下简称"OpenHarmony")3.2 Release新版本发布.相比一年前的OpenHarmo ...
- 掌握 C++ 编译过程:面试中常见问题解析
C++是一种高级编程语言,但是计算机并不能直接理解它.因此,需要将C++代码翻译成计算机可以理解的机器语言.这个过程就是编译过程,是C++程序从源代码到可执行文件的转换过程,包括预处理.编译.汇编和链 ...
- 编译安装openGauss 3.0.0
编译安装 openGauss 3.0.0 环境检查 1.1 检查 OS 版本 openGauss支持的操作系统: CentOS 7.6(x86 架构) openEuler-20.03-LTS(aarc ...
- Device Partner平台合作伙伴认证和数据安全保护
Device Partner平台是面向AIoT产业链伙伴的一站式服务平台,伙伴可以通过平台获取最新的产品.服务与解决方案,实现智能硬件产品的开发.认证.量产和推广等全生命周期的管理,加入Harmon ...
- 【资料包】HDC.Together 2023精选Codelabs指南现已上线(内有活动)
今年HDC.Together 2023的Codelabs挑战系列活动如期而至,众多开发者齐聚一堂,积极参与.本次赛题中部分Codelabs已在官网上线详细操作指南,让我们与众多coders一起探索代 ...
- caidao qsnctfwp
进入网页发现如下内容 直接使用蚁剑连接 连接并进入后,在根目录下发现名为 flag 的文件,即可获取 flag -End-