你的位置:首页 > 软件开发 > ASP.net > [.NET] 利用 async await 进行异步 IO 操作

[.NET] 利用 async await 进行异步 IO 操作

发布时间:2016-11-23 09:00:08
利用 async & await 进行异步 IO 操作【博主】反骨仔  【出处】http://www.cnblogs.com/liqingwen/p/6082673.html   序    上次,博主通过《利用 async & await 的异步编程》这篇点睛 ...

利用 async & await 进行异步 IO 操作

【博主】反骨仔  【出处】http://www.cnblogs.com/liqingwen/p/6082673.html   

序  

  上次,博主通过《利用 async & await 的异步编程》这篇点睛之作初步介绍了 async & await 的基本用法及异步的控制流和一些其它的东西;  

  接着,博主通过《怎样使用 async & await 一步步将同步代码转换为异步编程》这篇随笔诱导大家如何一步步转换自己的同步代码;

  今天,我们来一起看看如何用异步进行 IO 操作。

 

使用异步特性实现 IO 操作的意义

  • 异步特性有利于增强应用程序的响应能力。因为一个操作的 UI get='_blank'>线程可以执行其他工作。如果 UI 线程需要执行较长时间的代码(如,> 50ms),UI 会阻塞到 I/O 完成,这时用户界面线程才可以重新处理键盘、鼠标输入和其他操作。
  • 文件访问操作的延迟在本地也许非常低,但是,我们可以考虑一下文件在非本地时进行的操作。例如,文件可能会存放位于远程的服务器。
  • 使用异步额外增加的开销很小。
  • 异步任务可以并行运行。

 

使用 FileStream 类

  在任务完成后,进入 finally 块的将所有 FileStream 实例进行清理回收。如果直接在 using 语句中创建 FileStream 实例,则 FileStream 实例可能在任务完成之前就被处理。

  【注意】所有性能提高几乎完全是异步并行处理。异步的优点是它不会占用多个线程,也就是说,它不会占用用户界面线程。

 1     /// <summary> 2     /// 异步写入多个文件 3     /// </summary> 4     /// <param name="folder"></param> 5     /// <returns></returns> 6     private async Task WriteMultiTextAsync(string folder) 7     { 8       var tasks = new List<Task>(); 9       var fileStreams = new List<FileStream>();10 11       try12       {13         for (int i = 1; i <= 10; i++)14         {15           var fileName = Path.Combine(folder, $"{i}.txt");16           var content = Guid.NewGuid().ToString();17           var buffer = Encoding.UTF8.GetBytes(content);18 19           var fs = new FileStream(fileName,20     FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.None, bufferSize: 4096, useAsync: true);21           fileStreams.Add(fs);22 23           var writeTask = fs.WriteAsync(buffer, 0, buffer.Length);24           tasks.Add(writeTask);25         }26 27         await Task.WhenAll(tasks);28       }29       finally30       {31         foreach (var fs in fileStreams)32         {33           fs.Close();34           fs.Dispose();35         }36       }37     }

原标题:[.NET] 利用 async await 进行异步 IO 操作

关键词:.NET

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。