在.NET 4中,新增了任务(Tasks)功能,我想知道是否可以结合.NET 4.5中的Async/Await,将所有需要异步执行的方法都交给它处理,或者有些情况下我必须使用单独的线程?尤其是我读到Task.Run会使用线程池来实现方法的异步执行。
总之,结合Async/Await和Tasks能否不再使用Threads呢?
总之,结合Async/Await和Tasks能否不再使用Threads呢?
TaskCreationOptions.LongRunning
选项(连续的也有等价物),任务将不使用线程池线程,而是使用常规的 Thread
。从技术上讲,这是一个实现细节,不在规范中,但依赖此假设并不是完全不合理的。Task
做任何您可以直接使用 Thread
做的事情。Thread
的主要情况是创建自己的并行库,假设您选择不在 TPL 上构建它。虽然在业务应用程序的上下文中不重要,但在创建自己的库时,您可能需要访问特定 Thread
对象的底层细节,或者您可能希望避免使用 Tasks
的开销(尽管很小)。Task
选项。async
使一个方法可以等待其他可等待对象(它们不一定是方法),同时也可以被其他对象等待。在方法上等待可能意味着某些操作是异步的,也可能不是。 - Peter Ritchieawait Task.Delay
可以更轻松地创建一个“轮询”线程,而无需使用Thread.Sleep占用长时间运行的线程。我发现这消除了我想要创建专用长时间运行线程的绝大多数情况。 - Dan Bryant