我有一个PollingService,它每分钟启动一个Task。这个Task将获取我文件夹中的所有邮件,然后循环遍历每个处理它们。在最后一个Task仍在运行时,可能会启动一个Task。这将导致邮件处理两次,并创建重复的数据。如何防止这种情况发生?
发布于 2020-06-15 15:15:54
一种选择是使用有限并发任务调度程序 (参见示例)。这可以确保每个任务都按顺序运行。
另一个选项是启动一个在循环中等待autoResetEvent的线程。计时器只会触发autoResetEvent,释放线程来完成它的工作。缺点是这将消耗整个线程。
第三种选择是在开始工作时设置一个标志,并在它完成时重新设置它。然后,如果设置了标志,定时器就可以跳过启动任务。您可能希望使用lock或互锁来避免线程安全问题。
在任务完成之前添加项时可能会出现一些问题,但是如果它是在计时器上运行的,我将假设所有项最终都会被处理。
https://stackoverflow.com/questions/62390983
复制相似问题