C# 正在取消没有工作进程的后台工作进程。取消挂起检查?
我有一个C# 正在取消没有工作进程的后台工作进程。取消挂起检查?,c#,backgroundworker,C#,Backgroundworker,我有一个Validator类,它有一个Validate函数,这个Validate函数在一堆文件上循环并验证它们。用户可以取消验证过程 要取消后台工作人员,我需要Validtor类中后台工作人员实例的ta引用(用于取消验证过程),并对其调用CancellationPending 但问题是验证器类不能引用后台工作程序,因为有时我们会同步调用“Validate”函数,而验证器类不必知道这一点 到目前为止,我已尝试替换backgroundworker.CancellationPending检查一些标志,
Validator
类,它有一个Validate
函数,这个Validate函数在一堆文件上循环并验证它们。用户可以取消验证过程
要取消后台工作人员,我需要Validtor类中后台工作人员实例的ta引用(用于取消验证过程),并对其调用CancellationPending
但问题是验证器类不能引用后台工作程序,因为有时我们会同步调用“Validate”函数,而验证器类不必知道这一点
到目前为止,我已尝试替换backgroundworker.CancellationPending
检查一些标志,例如IsCanceled
,这些标志似乎不起作用。您有两个选择:
Validate
方法进行两次重载。一个是同步的,一个是异步的,可取消的Validate
方法,以便调用代码负责在文件上循环(考虑迭代器方法,使用yield
)我会选择选项1,因为它是一个较小的更改。您可以在(!Abort)调用时将您的工作包装在
中,并设置字段,但我建议您考虑使用任务
执行CPU密集型工作,它支持CancellationTokens
问题是我不能在validate类中保留对后台工作者的引用,因为验证逻辑不必知道它是否在后台线程中运行。第二个选项不可能,因为我有不同类型的验证程序类,每个类都实现“IValidate”接口。@naveen我的解决方案是为validtor上的异步操作提供便利。如果希望能够取消中间操作,则实现该操作的代码必须更改。