c# 5.0 中新的异步语言特性在很大程度上依赖于 Task 对象,许多示例表明,在 Task 中运行某些代码的一种常见方法是通过 Task.Run() 启动它,它将您的代码表示为任务并在线程池线程上运行它。
但是,我也读过不应该在线程池线程上启动长时间运行的代码,这让我想到了这个问题:是否仍然可以使用所有 C# 异步语言功能(例如 Task、'await'、'async ') 在“常规”线程上而不使用线程池?在这种情况下,如何获得一个代表在“常规”线程上运行的代码的 Task 对象?
作为关于不在线程池中运行长时间运行代码的规则的后续问题 - 该规则是否仅适用于 CPU 密集型代码?如果您的代码运行了很长时间(例如 72 小时),但大部分时间都花在做诸如“等待 Task.Delay()”之类的事情上怎么办……那么可以使用线程池线程,还是应该使用“常规”?并发代码需要长时间运行的所有情况下的线程?