认识异步编程
C#异步编程符号 :修饰符 async ,await,返回值类型Task<T>
注意事项:(1)异步方法命名最好以async异步结尾
(2)异步方法可以处理更多的请求,但是不等于多线程
(3)方法里有await,则必须有修饰符async
(4)异步方法即使没有返回值,返回值类型也为声明为Task
(5)通过异步承载更大的并发量
(6)await 等待执行完成,不写的话,代码会继续向下执行
//字符串操作类,会比string+=效率高
StringBuilder stringBuilder= new StringBuilder();
for (int i = 0; i < 10000; i++)
{
stringBuilder.Append(i.ToString()+'\n');
}
//异步方法没有await的话,不管有没有执行完,都会执行下一段代码,加了await的话,会等待执行完成后,继续执行下一段代码
File.WriteAllTextAsync(@"D:\.net core 学习\staticFile\asnyc读取文件.txt", stringBuilder.ToString());
//File为文件操作类,WriteAllTextAsync写入文件,ReadAllText读取文件
Console.WriteLine( File.ReadAllText(@"D:\.net core 学习\staticFile\asnyc读取文件.txt"));

上处异常为没有await的时候,写入文件没有执行完成,代码就向下继续执行,导致会有两个进程操作该文件,抛出异常正在被其它进程使用
(7)有异步方法的时候优先使用
(8)在不支持异步方法的时候,无法加上修饰符async和await ,可以使用 wait(),result,
.getawaiter().getresult() 编译器反编译得知
File.ReadAllTextAsync(@"D:\.net core 学习\staticFile\asnyc读取文件.txt").Wait();
Console.WriteLine(File.ReadAllTextAsync(@"D:\.net core 学习\staticFile\asnyc读取文件.txt").Result);
Console.WriteLine(File.ReadAllTextAsync(@"D:\.net core 学习\staticFile\asnyc读取文件.txt").GetAwaiter().GetResult());
wait(),result一般不建议使用,会有死锁的风险
(9)使用异步委托
static void Main(string[] args)
{
Console.WriteLine("Hello World!");
//异步委托
ThreadPool.QueueUserWorkItem(
async (obj) =>
{
while(true)
{
await File.WriteAllTextAsync(@"D:\.net core 学习\1.txt", "aaaaa");
}
}
);
var result =Console.ReadKey();
}