using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO; //文件异步操作
namespace FileAsynchronousOperation
{
class Program
{
static void Main(string[] args)
{
//实例化MyFile类
MyFile myFile = new MyFile();
//定义参数
string filePath = "D:\\testasy.txt";
string msg = "helloworld";
//调用异步操作方法
myFile.AsynchronousOperation(filePath,msg);
}
}
/// <summary>
/// 文件
/// </summary>
class MyFile
{
/// <summary>
/// 文件异步操作
/// </summary>
/// <param name="filePath">文件路径</param>
/// <param name="msg">写入内容</param>
public void AsynchronousOperation(string filePath,string msg)
{
FileStream fileSteam = null; FileInfo fileinfo = new FileInfo(filePath);
//判断文件是否存在
if (!fileinfo.Exists)
{
fileSteam = fileinfo.Create();
Console.WriteLine("创建文件{0}", filePath);
fileSteam.Close();
}
fileSteam = new FileStream(filePath, FileMode.Open, FileAccess.Write, FileShare.None, , true);
Console.WriteLine("开启异步操作{0}", fileSteam.IsAsync);
byte[] buffer = Encoding.Default.GetBytes(msg);
//开始执行异步操作
IAsyncResult asynncResult = fileSteam.BeginWrite(buffer,, buffer.Length, new AsyncCallback(EndWriteCallBack), fileSteam);
Console.WriteLine("开始异步写入请稍候...");
Console.Read();
}
/// <summary>
/// 回调函数
/// </summary>
/// <param name="asyncResult">状态</param>
public void EndWriteCallBack(IAsyncResult asyncResult)
{
Console.WriteLine("异步写入开始...");
FileStream stream = asyncResult.AsyncState as FileStream;//转化为FileStream类型
if (stream!=null)
{
stream.EndWrite(asyncResult);
stream.Close();
}
Console.WriteLine("写入完成"); }
}
}
Filestreom 在对文件进行异步操作时,对大数据量读写操作使用 BeginRead 和 Begin 树 rite 方法的效果更好;
而对于数据量较少的读写操作,使川异步方式的速度可能会比同步方式要慢。
所以,你需要针对应用程序的实际情况决定是否要选择异步处理方式。

C# 文件异步操作的更多相关文章

  1. C#客户端的异步操作

    上篇博客[用Asp.net写自己的服务框架] 我讲述了如何实现自己的服务框架,但我想很多人应该用过WebService这类服务框架,相比起来,似乎还缺少什么东西, 是的,我也感觉到了.比如:我可以很容 ...

  2. 关于generator异步编程的理解以及如何动手写一个co模块

    generator出现之前,想要实现对异步队列中任务的流程控制,大概有这么一下几种方式: 回调函数 事件监听 发布/订阅 promise对象 第一种方式想必大家是最常见的,其代码组织方式如下: fun ...

  3. async + promise 解决回调地狱

    // 解决异步回调地狱的方案: async + promise async function writeFile() {   // 打开文件   const fd = await new Promis ...

  4. 看完我的笔记不懂也会懂----Node.js

    Node.js 学习 - 命令行窗口 - 进程与线程 - ECMAScript的缺点 - Node模块化 - Node中的全局对象 - 包 package - NPM包管理器 (Node Packag ...

  5. 返璞归真 asp.net mvc (11) - asp.net mvc 4.0 新特性之自宿主 Web API, 在 WebForm 中提供 Web API, 通过 Web API 上传文件, .net 4.5 带来的更方便的异步操作

    原文:返璞归真 asp.net mvc (11) - asp.net mvc 4.0 新特性之自宿主 Web API, 在 WebForm 中提供 Web API, 通过 Web API 上传文件, ...

  6. android用异步操作AsyncTask编写文件查看器

    Activity程序 package com.example.fileasynctaskproject; import java.io.File; import java.util.ArrayList ...

  7. Javascript - 异步操作和读取文件

    node.js读取文件 node.js内置了异步读取文件的模块,可以很方便地读取文件的数据.先创建三个txt文档,在根目录下创建一个readFile.js 输入以下代码,然后在vscode的终端中输入 ...

  8. 【C#进阶系列】27 I/O限制的异步操作

    上一章讲到了用线程池,任务,并行类的函数,PLINQ等各种方式进行基于线程池的计算限制异步操作. 而本章讲的是如何异步执行I/O限制操作,允许将任务交给硬件设备来处理,期间完全不占用线程和CPU资源. ...

  9. C# 异步操作 async await

    在编程的过程中,我们会遇到很多需要异步操作的场景.比如要下载一个文件,如果使用同步的方式进行下载,那么UI操作就会被卡住,这时最好能够使用异步的方式进行下载.在C#中,很早就开始支持异步的操作了,只不 ...

随机推荐

  1. PYTHON 爬虫笔记五:BeautifulSoup库基础用法

    知识点一:BeautifulSoup库详解及其基本使用方法 什么是BeautifulSoup 灵活又方便的网页解析库,处理高效,支持多种解析器.利用它不用编写正则表达式即可方便实现网页信息的提取库. ...

  2. python学习笔记:第五天( 字典)

    Python3 字典 字典是另一种可变容器模型,且可存储任意类型对象. 字典的每个键值(key=>value)对用冒号(:)分割,每个对之间用逗号(,)分割,整个字典包括在花括号({})中 ,格 ...

  3. ThreadPoolExecutor线程池进阶使用

    一.简介 线程池类为 java.util.concurrent.ThreadPoolExecutor,常用构造方法为: ThreadPoolExecutor(int corePoolSize, int ...

  4. listen 54

    Our library is also open for the local residents. People are doing their Christmas shopping. Later t ...

  5. (转)Linux内核本身和进程的区别 内核线程、用户进程、用户线程

    转自:http://blog.csdn.net/adudurant/article/details/23135661 这个概念是很多人都混淆的了,我也是,刚开始无法理解OS时,把Linux内核也当做一 ...

  6. 【MFC】动态创建CMFCToolbar图标不显示问题

    最近遇到一个问题,需要动态的从xml文件读取一系列图标文件,加载到一个toolbar中,由于使用的是vs2008 with sp1 feature pack,自然想到用CMFCToolbar来做,思路 ...

  7. swift的泛型貌似还差点意思

    protocol Container { typealias ItemType mutating func append(item: ItemType) mutating func removelas ...

  8. 关于在linux python源文件头部添加 “#!/usr/bin/env python” 不能直接运行的问题

    如果环境变量设置正确 如果文件是从windows拷贝到linux中的 可能是换行符造成的.试试dos2unix命令,或相似的命令,把dos格式的换行符转为unix格式.

  9. CF 949D Curfew——贪心(思路!!!)

    题目:http://codeforces.com/contest/949/problem/D 有二分答案的思路. 如果二分了一个答案,首先可知越靠中间的应该大约越容易满足,因为方便把别的房间的人聚集过 ...

  10. bzoj 2259 [Oibh] 新型计算机 —— 最短路

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2259 相邻点之间连边权为1的边,就是水最短路了: 要注意点上的数不能改成负数,但是想一想改成 ...