这两者有什么不同:

Task.Run(() => File.ReadAllText(path));

File.ReadAllTextAsync(path);

我希望第二种方法更快,当然,但一般来说,有什么安全理由让我not使用第一种方法吗?我以File.ReadAllText为例,但对我来说,这个问题的重点是异步部分.

推荐答案

根据我对两者的理解,我会这样分类

  1. File.ReadAllTextAsync(path);个 执行可立即返回可等待的任务的非阻塞异步操作

  2. Task.Run(() => File.ReadAllText(path));个 执行同步阻塞操作,但将其卸载到线程池中的新线程

考虑到这些差异,很明显为什么File.ReadAllTextAsync(path);在许多i/o操作发生的情况下更好,因为Task.Run(() => File.ReadAllText(path));将保持一个线程,直到操作完成.

Summary

这两种方法都将在主线程上执行非阻塞操作,区别在于Task.Run(() => File.ReadAllText(path));将在操作期间占用线程.

Csharp相关问答推荐

更新数据库中的对象失败,原因是:Microsoft. EntityFrame Core. GbUpdateConcurrencyResponse'

Dapper是否可以自动扩展类成员

IComponition.获取IReadOnlyCollection的返回默认属性值

更改对象的旋转方向

在C#WinUI中,一个关于System的崩溃."由于未知原因导致执行不例外"

为什么在ANTLR4中会出现不匹配的输入错误?""

更新产品但丢失产品ASP.NET Core的形象

在此系统上已禁用获取正在运行的脚本.&在ASP.NET Core Web API中

在使用Audit.NET的AuditTrail实现中,如何逐月将数据摄取到AzureTableStorage?

try 在.Net核心身份注册页面中使用AJAX,但没有成功..NET Core 5.0 Razor页面应用程序

如何在CSharp中将json字符串转换为DataTable?

WinUI 3中DoubleCollection崩溃应用程序类型的依赖属性

如何在C#中正确类型化带有泛型的嵌套类

为什么在使用JsonDerivedType序列化泛型时缺少$type?

Xamarin Forms应用程序中登录页面的用户名和密码编辑文本之间不需要的空格

如何为控制器PUT操作绑定对象数组

如何根据分割文本的块数来计算文本的大小?

如何对构建在Clean架构和CQRS之上的控制器进行单元测试?

在c#中,使用Okta和Blazor时,LocalReDirect()陷入循环,出现错误&请求太多.

MS Project读取项目自定义域