async vs threading,何时使用每个选项?

这个页面, http://msdn.microsoft.com/en-us/library/vstudio/hh191443.aspx ,在线程部分,说一个异步方法不在其他线程中运行,如果我想使用其他线程,我会使用Task.Run。

所以我理解异步和线程是两个不同的东西,每个选项都适用于某些情况。 我想知道何时更好地使用异步,何时更好地使用线程。

谢谢。

当你有不断的工作要做时,你可以使用线程。 直接使用自定义写入池。 即便如此,您也可以将其隐藏在自定义任务计划程序后面(使用自己的线程池)。

当你对低级线程参数进行控制时,线程有一些优点 – 这是非常罕见的。 像设置优先级这样的琐事是你也可以在异步中做的事情(记得退缩),但有时候你需要为互操作设置一些东西。

尽管如此,这些天线程是一个非常低级别的API – 因为任务是自定义调度程序,你真的很少使用自定义任务调度程序之外的线程(它可能在内部使用自定义线程的线程池作为低级API) 。

当你将一个线程用于LONG TERM时,线程也会派上用场。 长期不一定是“计算密集型”。 我这里有一个API,它在一个自定义线程上运行24小时循环 – 我启动一个线程,调用一个“过程数据”方法回调给我。 该方法返回发出/错误,或每天返回一次(立即重新启动以用于下一个实时数据块)。 显然,忙碌不停,这是一个线程的好例子,而不是任务,因为任务的高级function都是无用的。

几乎所有其他的东西这些天我使用的是Tasks / async。