之前的FileIO项目和TaskExample项目中分别存在如下缺点:
1、使用Wait()方法,会阻塞Main Thread的运行,如果是UI界面的程序,UI无法操作,用户体验很差;
2、使用ContinueWith()方法,不会阻塞Main Thread,但是代码比较复杂且不易维护;
async和await很好得解决了此问题。
示例
Program.cs
using System.Security.Cryptography.X509Certificates;
namespace FileIOExample
{
internal class Program
{
static void Main(string[] args)
{
string fileName = @"F:/FileIO.txt";
FileWriter fileWriter = new FileWriter();
FileReader fileReader = new FileReader();
//Write data to a file asynchronously
Task writerTask = fileWriter.WriteFileAsync(fileName, "江雪\t唐·柳宗元\t千山鸟飞绝,万径人踪灭。孤舟蓑笠翁,独钓寒江雪。");
writerTask.Wait();
Console.WriteLine("File written.");
//Read data from the file asynchronously
Task<string> readerTask = fileReader.ReadFileAsync(fileName);
readerTask.Wait();
Console.WriteLine("File read.");
Console.WriteLine($"\nFile content: {readerTask.Result}");
GC.Collect();
Console.ReadKey();
}
}
class FileWriter
{
public async Task WriteFileAsync(string fileName, string data)
{
StreamWriter writer = new StreamWriter(fileName);
Task writerTask = writer.WriteAsync(data);
await writerTask;
writer.Close();
}
}
class FileReader
{
public async Task<string> ReadFileAsync(string fileName)
{
StreamReader reader = new StreamReader(fileName);
Task<string> readerTask = reader.ReadToEndAsync();
//reader.Close();
return await readerTask;
}
}
}