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

时间:2012-12-09 19:03:00

标签: c# multithreading async-await

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

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

感谢。

1 个答案:

答案 0 :(得分:3)

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

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

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

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

几乎所有其他事情现在我使用了Tasks / async。