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 方法的效果更好;
而對于數據量較少的讀寫操作,使川異步方式的速度可能會比同步方式要慢。
所以,你需要針對應用程序的實際情況決定是否要選擇異步處理方式。