调用 Task.Run() 与调用 DoSomethingAsync() 有什么不同?

问题描述 投票:0回答:1

这两者有什么区别:

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

File.ReadAllTextAsync(path);

我希望第二种方法更快,当然,但一般来说,有什么安全原因我应该使用第一种方法吗?我使用

File.ReadAllText
作为示例,但对我来说这个问题的重点是异步部分。

c# asynchronous task
1个回答
2
投票

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

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

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

鉴于这些差异,很明显为什么

File.ReadAllTextAsync(path);
在发生许多 i/o 操作的情况下更好,因为
Task.Run(() => File.ReadAllText(path));
将保留一个线程直到操作完成。

总结

两种方法都会在主线程上执行非阻塞操作,区别在于

Task.Run(() => File.ReadAllText(path));
会在操作期间占用一个线程。

© www.soinside.com 2019 - 2024. All rights reserved.