c#异步IO操作文件
C#中的异步I/O操作文件可以使用异步方法或任务来实现。以下是使用异步方法的示例代码:
using System;
using System.IO;
using System.Threading.Tasks;
class Program
{
static async Task Main(string[] args)
{
// 异步读取文件
using (FileStream stream = new FileStream("input.txt", FileMode.Open, FileAccess.Read, FileShare.Read, bufferSize: 4096, useAsync: true))
{
byte[] buffer = new byte[4096];
int bytesRead = await stream.ReadAsync(buffer, 0, buffer.Length);
Console.WriteLine($"Read {bytesRead} bytes");
}
// 异步写入文件
using (FileStream stream = new FileStream("output.txt", FileMode.Create, FileAccess.Write, FileShare.None, bufferSize: 4096, useAsync: true))
{
byte[] buffer = new byte[4096];
await stream.WriteAsync(buffer, 0, buffer.Length);
Console.WriteLine("Write complete");
}
}
}
以上代码使用了FileStream类来打开文件并进行异步读取和写入操作。在打开文件时,将useAsync参数设置为true以启用异步模式。在读取和写入操作中,使用ReadAsync和WriteAsync方法来异步读取和写入数据。
另外,也可以使用Task.Run方法将同步的文件操作包装成异步任务。以下是使用任务的示例代码:
using System;
using System.IO;
using System.Threading.Tasks;
class Program
{
static async Task Main(string[] args)
{
// 异步读取文件
byte[] buffer = await Task.Run(() =>
{
using (FileStream stream = new FileStream("input.txt", FileMode.Open, FileAccess.Read, FileShare.Read, bufferSize: 4096))
{
byte[] buffer = new byte[4096];
int bytesRead = stream.Read(buffer, 0, buffer.Length);
Console.WriteLine($"Read {bytesRead} bytes");
return buffer;
}
});
// 异步写入文件
await Task.Run(() =>
{
using (FileStream stream = new FileStream("output.txt", FileMode.Create, FileAccess.Write, FileShare.None, bufferSize: 4096))
{
byte[] buffer = new byte[4096];
stream.Write(buffer, 0, buffer.Length);
Console.WriteLine("Write complete");
}
});
}
}
以上代码使用了Task.Run方法将同步的文件操作包装成异步任务,并使用await关键字等待任务完成。在读取和写入操作中,使用FileStream类来打开文件,并使用Read和Write方法进行同步的读取和写入操作
原文地址: https://www.cveoy.top/t/topic/fhBb 著作权归作者所有。请勿转载和采集!