我读了另一天,对于长时间运行的任务,我最好的办法是手动创建线程,而不是使用.NET的线程池或任务并行.当我正在学习c#线程,特别是长时间运行的IO任务时,我真的希望有人开启我.先谢谢你.
解决方法
那是真实的.线程池针对小型工作单元进行了优化,您可以通过持有线程池线程来干扰其他工作.
我的经验法则是如果一个操作可能需要一秒钟以上,它不应该在一个线程池线程上.那可能很长
虽然这是没有文档的,但如果您使用TaskCreationOptions.LongRunning启动任务,则会启动一个新的线程来运行该任务.
对于大多数IO任务,您应该真正使用的框架方法有异步版本.这些使用内核函数,意味着你不会阻止任何线程.
和往常一样,我建议阅读Joe Albahari’s free ebook,
其次是Joe Duffy’s Concurrent Programming on Windows.后期是1000页长,但充满了有用的细节.