Csharp/C#教程:Task.Factory.StartNew vs Async方法分享


Task.Factory.StartNew vs Async方法

可能是一个微不足道的问题,但它可能有助于我的基本理解。

以下两个实现之间是否有任何重要区别?

  1. Task.Factory.StartNew

     public Task ReadAllTextAsync(string path) { return Task.Factory.StartNew(() => File.ReadAllText(path)); } 
  2. StreamReader上的异步方法:

     public async Task ReadAllTextAsync(string path) { using (var stream = File.OpenRead(path)) using (var reader = new StreamReader(stream)) { return await reader.ReadToEndAsync(); } } 

是的,有一个至关重要的区别: Task.Factory.StartNew不保留同步上下文,而在使用async / await时,保留了此上下文。 例如,在ASP.NET应用程序中,这意味着如果您使用Task.Factory.StartNew则可能无法在任务内部访问HttpContext,而如果您使用async / await,则它将可用。

您提供的示例还有另一个重要区别。 在第一种情况下,您使用的是阻塞API: File.ReadAllText(path)而在第二种情况下,您正在使用具有真正异步I / O操作的I / O完成端口。 这意味着在第一种情况下,您正在危害此任务在执行此任务期间执行的线程,而在第二种情况下,由于I / O完成端口,此线程是免费的。

上述就是C#学习教程:Task.Factory.StartNew vs Async方法分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/1002511.html

(0)
上一篇 2021年12月28日
下一篇 2021年12月28日

精彩推荐