.net core 学习笔记3:异步编程

  1. 认识异步编程

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();
        }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值