这个页面,http://msdn.microsoft.com/en-us/library/vstudio/hh191443.aspx,在线程部分中指出,异步方法不会在其他线程中运行,如果想使用其他线程,则需要使用Task.Run。因此我理解异步和线程是两个不同的概念,每种选项在某些情况下都很好用。我想知道什么情况下更适合使用异步,什么情况下更适合使用线程。谢谢。
当你有持续的工作需要处理时,你可以使用线程。直接使用或是自定义写一个线程池。即使这样,你也可以将其隐藏在一个自定义任务计划程序后面(使用它自己的线程池)。当你需要控制低级别线程参数时,线程具有一些优势 - 但这种情况非常少见。一些琐碎的东西,如设置优先级,你也可以在异步中完成(记得重新设置),但有时你需要为互操作设置相当多的内容。然而,现在的线程是一个非常低级别的 API ,因为使用自定义调度器的任务已经存在了,你几乎没有什么理由再使用线程,除非是在自定义任务调度器(可能在内部使用自定义线程池)之外。当你分配一个线程进行长期处理时,线程也很方便。长期不一定是 "计算密集型"。我这里有一个 API,在自定义线程上运行24小时循环 - 我启动一个线程,调用一个“处理数据”方法,该方法回调到我这里。该方法要么在出现问题/错误时返回,要么每天一次(立即重新启动下一个实时数据块)。显然,忙碌不停,这是线程的好例子,而不是任务,因为任务的所有高级特性都没有用处。现在几乎所有其他的情况下,我都使用任务/异步。
Task
与Thread
的区别,而更多地涉及到async
与Task.Run()
的区别。 - svick