Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.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_Task Parallel Library_Conceptual_Long Running Processes - Fatal编程技术网

C# 用于长时间运行操作的线程或任务

C# 用于长时间运行操作的线程或任务,c#,multithreading,task-parallel-library,conceptual,long-running-processes,C#,Multithreading,Task Parallel Library,Conceptual,Long Running Processes,我需要在我的应用程序中有一个长时间运行的线程(它是一个类似Cron的作业调度程序),并且大部分时间处于睡眠状态。所以没有太多的CPU和IO。你对此有什么建议。具有长时间运行选项的任务是否是处理此问题的正确方法,或者我是否应该依赖老式线程,让该线程过自己的生活?具有长时间运行选项的任务可以。它将在后台创建一个新线程,您不必担心细节。计时器不是更好吗?也许也是个不错的选择。@Dirk:我试过了,但不太喜欢。我觉得做这种工作有点太重了。此外,我还需要维护每个调用之间的状态。我可能有一个静态变量来存储这

我需要在我的应用程序中有一个长时间运行的线程(它是一个类似Cron的作业调度程序),并且大部分时间处于睡眠状态。所以没有太多的CPU和IO。你对此有什么建议。具有长时间运行选项的任务是否是处理此问题的正确方法,或者我是否应该依赖老式线程,让该线程过自己的生活?

具有长时间运行选项的任务可以。它将在后台创建一个新线程,您不必担心细节。

计时器不是更好吗?也许也是个不错的选择。@Dirk:我试过了,但不太喜欢。我觉得做这种工作有点太重了。此外,我还需要维护每个调用之间的状态。我可能有一个静态变量来存储这种状态,但我通常会尽量避免。一个线程会自动消耗一百万字节的虚拟内存和页面文件空间(记住,线程堆栈是在CLR中提交的,而不仅仅是保留的),所以你认为计时器太重没有多大意义。你已经愿意使用最重的物体有共同的用途;几乎所有的东西都比单一用途的专用线程轻,或者你的意思是Quartz.NET太重了;我对此一无所知。不过,你最好还是使用合适的工具来完成这项工作。计时器用于在特定时间间隔后运行代码,因此我倾向于使用计时器,而不是尝试编写自己的计时器。@Dave:长时间运行的任务可以从线程池中分配线程。池策略的目的当然是降低创建和销毁线程等重量级对象的成本。我的建议是:按照您认为最好的方式编写程序,同时,使用对您的客户有意义的指标来衡量其性能。这样,您就可以知道您的选择是否造成了客户的痛苦。