前几天我读到,对于长时间运行的任务,我最好的选择是手动创建线程,而不是使用.NET的线程池或Task Parallel。当我学习有关C#线程的信息时,特别是针对长时间运行的IO任务,我真的很想启发我。先感谢您。
最佳答案
那是真实的。线程池针对小型工作单元进行了优化,您可以通过保留线程池线程来干扰其他工作。
我的经验法则是,如果一个操作可能花费一秒钟以上的时间,则该操作不应在线程池线程上。那可能很长。
尽管未记录,但是如果您使用Task
启动TaskCreationOptions.LongRunning
,则将启动新的线程来运行任务。
对于大多数IO任务,您应该真正使用框架方法的异步版本。这些利用内核函数,这意味着您不会阻塞任何线程。
与往常一样,我建议阅读Joe Albahari's free ebook,
其次是Joe Duffy's Concurrent Programming on Windows。后者长1000页,但充满了有用的详细信息。
关于.net - 的确,对于长时间运行的进程,最好手动执行线程而不是线程池?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10298641/