Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 异步与线程,何时使用每个选项?_C#_Multithreading_Async Await - Fatal编程技术网

C# 异步与线程,何时使用每个选项?

C# 异步与线程,何时使用每个选项?,c#,multithreading,async-await,C#,Multithreading,Async Await,这个页面,在线程部分,说异步方法不会在其他线程中运行,如果我想使用其他线程,我会使用Task.run 所以我知道异步和线程是两个不同的东西,每个选项都适用于某些情况。我想知道什么时候使用异步更好,什么时候使用线程更好 谢谢。当您有固定的工作要做时,您可以使用线程。或者直接使用自定义写入池。即使这样,您也可以将其隐藏在自定义任务调度器后面(使用他自己的线程池) 当你对低级线程参数进行控制时,线程有一些优势,这是非常罕见的。设置优先级之类的琐事也可以在异步中执行(请记住设置为后退),但有时您需要为互

这个页面,在线程部分,说异步方法不会在其他线程中运行,如果我想使用其他线程,我会使用Task.run

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


谢谢。

当您有固定的工作要做时,您可以使用线程。或者直接使用自定义写入池。即使这样,您也可以将其隐藏在自定义任务调度器后面(使用他自己的线程池)

当你对低级线程参数进行控制时,线程有一些优势,这是非常罕见的。设置优先级之类的琐事也可以在异步中执行(请记住设置为后退),但有时您需要为互操作设置很多东西

尽管如此,现在的线程还是一个非常低级的API——因为任务都有自定义的调度程序,所以在自定义任务调度程序之外的线程实际上没有什么用处(自定义任务调度程序内部可能使用自定义线程的线程池作为低级API)

当你长期使用一根线时,线也会派上用场。长期不一定是“计算密集型”的。我这里有一个API,它在一个定制线程上以24小时循环的方式运行——我启动一个线程,调用一个“进程数据”方法,该方法会调用我。该方法在出现问题/错误时返回,或每天返回一次(对于下一个实时数据块,将立即重新启动)。显然,由于忙个不停,这是一个线程的好例子,而不是一个任务,因为任务的所有高级功能都是无用的


这些天来,对于几乎所有的事情,我都使用Tasks/async。

而对于async/awiat,我使用所有的CPU,或者如果我使用所有的CPU,我需要很多线程?我认为问题不是关于
Task
Thread
,而是关于
async
Task.Run()
的更多信息,当我说Task.Run是因为任务创建了一个新线程,如果我没有错的话,异步不是。不,实际上异步是一个任务。它在默认调度程序上调度任务-完全相同。阅读async,了解它的含义,以及在调用async方法时返回的内容。围绕着一项任务。