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 方法的效果更好;
而对于数据量较少的读写操作,使川异步方式的速度可能会比同步方式要慢。
所以,你需要针对应用程序的实际情况决定是否要选择异步处理方式。

最新文章

  1. mysql计算时间差函数
  2. RDVTabBarController的基本使用 以及tabbar的防止双点击方法
  3. 10.11 cocoapods安装
  4. link,unlink,remove, rename函数
  5. 斌哥的 Docker 进阶指南
  6. LoaderManager使用详解(一)---没有Loader之前的世界
  7. ACM2050前传
  8. 扩展Python模块系列(五)----异常和错误处理
  9. 如何初始化grunt
  10. PHP curl 常用操作
  11. C++11的value category(值类别)以及move semantics(移动语义)
  12. IT轮子系列(四)——使用Jquery+formdata对象 上传 文件
  13. Ocelot中文文档-GraphQL
  14. WEB前端学习资源清单
  15. 使用item来封装数据:
  16. docker daemon 配置代理
  17. Python使用requests库,requests.post格式会引发参数不存在问题
  18. 翻译:update语句(已提交到MariaDB官方手册)
  19. 我的IT之路这样走过
  20. 『流畅的Python』第14章:可迭代的对象、迭代器和生成器

热门文章

  1. oracle中导出sql的几个常见词语的意思
  2. C语言中的指针(一)
  3. poj1456 Supermarket[另类的并查集做法]
  4. windows下vs2012用gsoap开发webservice实例
  5. Standby Redo Log 的设定原则、创建、删除、查看、归档位置
  6. SpringMVC之二:配置 Spring MVC
  7. KMP匹配
  8. Session与Cookie(1)
  9. spring加载hibernate映射文件的几种方式
  10. Linux命令总结_sort排序命令