我正在开发的应用程序是这样组成的:生产者任务扫描文件系统中的文本文件并将对它们的引用放入包中。许多消费者任务同时从包中获取文件引用并读取文件(并对它们的内容做一些简短的工作)
我必须能够暂停和恢复整个过程。
我尝试过使用 TPL,为每个文件引用创建一个任务,因为它们被放入包中(在这种情况下,包只是一个概念,生产者在找到文件时直接创建消费者任务)但这样我不我无法控制我创建的任务,我不能(或者我不知道如何)暂停它们。我可以编写一些代码来暂停当前正在执行任务的线程,但这会破坏处理逻辑任务而不是手动创建线程的意义,不是吗?我想要类似“已经分配给物理线程的任务可以完成但等待逻辑任务不应该在恢复命令之前开始”
我怎样才能做到这一点?可以用 TPL 完成还是我应该使用其他东西?
编辑: 您的答案都是有效的,但我的主要疑问仍未得到解答。我们正在谈论任务,如果我使用 TPL,我的生产者和我的许多消费者将是任务(对吗?)而不是线程(好吧,在执行的那一刻,任务将映射到线程上)。我发现的每一种同步机制(如评论“ManualResetEventSlim”中提出的那种)都在线程级别工作。
例如“ManualResetEventSlim”的Wait()方法的描述是“阻塞当前线程直到当前ManualResetEventSlim被设置”。
我对任务的了解纯粹是学术性的,我不知道“现实世界”中的事情是如何运作的,但对我来说,我需要一种在任务级别或事物上协调(等待/信号/...)任务的方法似乎是合乎逻辑的可能会变得很奇怪......就像......两个任务可能映射在同一个线程上,但一个应该发出信号,另一个正在等待然后死锁。我有点困惑。这就是为什么我问我的应用程序是否可以使用 TPL 而不是老式的简单线程。