• C# 文件异步操作


    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, 4096, true);
                Console.WriteLine("开启异步操作{0}", fileSteam.IsAsync);
                byte[] buffer = Encoding.Default.GetBytes(msg);
                //开始执行异步操作
                IAsyncResult asynncResult = fileSteam.BeginWrite(buffer,0, 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 方法的效果更好;
    而对于数据量较少的读写操作,使川异步方式的速度可能会比同步方式要慢。
    所以,你需要针对应用程序的实际情况决定是否要选择异步处理方式。
  • 相关阅读:
    005 ES的文档一些控制
    004 REST风格中在ES中的约定
    003 接触elasticsearch的Restful Api【快速入门】
    002 elasticsearch中的一些概念
    001 centos7下安装kibana
    000 centos7下安装elasticsearch7的单节点安装
    006 DOM节点操作与元素的创建
    006 认识BeanNameAware
    005 Spring和SpringBoot中的@Component 和@ComponentScan注解
    004 JpaRepository,CrudRepository,PagingAndSortingRepository的区别
  • 原文地址:https://www.cnblogs.com/lbonet/p/7396319.html
Copyright © 2020-2023  润新知