Parallel Execution - ZjzMisaka/PowerThreadPool.zh-CN.Wiki GitHub Wiki
允许使用多个线程高效地并行执行循环. 此功能支持索引循环 (For
), 基于集合的循环 (ForEach
) 以及对 ConcurrentObservableCollection
的监控 (Watch
).
For
设计用于并行执行循环, 在指定的索引范围内迭代. 它可以处理不同类型的集合, 且有各种灵活的重载.
-
For(int start, int end, Action<int> body, int step = 1, string groupName = null)
执行从start
到end
的循环, 并对每个索引执行指定的操作.// Do something before loop powerPool.For(0, 10, (i) => DoSomething(i)).Wait(); // Do something after loop
-
For<TSource>(int start, int end, IList<TSource> source, Action<TSource> body, int step = 1, string groupName = null)
在集合上执行从start
到end
的循环, 对每个元素执行指定的操作.// Do something before loop powerPool.For(0, 10, list, (item) => DoSomething(item)).Wait(); // Do something after loop
-
For<TSource>(int start, int end, IList<TSource> source, Action<TSource, int> body, int step = 1, string groupName = null)
在集合上执行从start
到end
的循环,对每个元素及其索引执行指定的操作.// Do something before loop powerPool.For(0, 10, list, (item, i) => DoSomething(item, i)).Wait(); // Do something after loop
-
start
: 循环的起始索引. -
end
: 循环的结束索引. -
source
: 循环中要处理的元素的源集合. -
body
: 每次循环迭代中执行的操作, 接收来自源集合的元素和迭代索引. -
step
(可选): 每个循环迭代的步长值. 默认为1. -
groupName
(可选): 任务组的可选名称. 默认为null.
ForEach
被设计用于并行迭代集合, 对每个元素应用指定的操作. 它适用于循环需要同时处理集合元素的场景.
-
ForEach<TSource>(IEnumerable<TSource> source, Action<TSource> body, string groupName = null)
在集合上执行一个循环, 对每个元素执行指定的操作.// Do something before loop powerPool.ForEach(list, (item) => DoSomething(item)).Wait(); // Do something after loop
-
ForEach<TSource>(IEnumerable<TSource> source, Action<TSource, int> body, string groupName = null)
在集合上执行一个循环, 对每个元素及其索引执行指定的操作.// Do something before loop powerPool.ForEach(list, (item, i) => DoSomething(item, i)).Wait(); // Do something after loop
-
source
: 循环中要处理的元素的源集合. -
body
: 要对源集合中的每个元素及其索引执行的操作. -
groupName
(可选): 任务组的可选名称. 默认为null.
Watch
用于监控一个可观察的集合(observable collection)是否发生变化, 并通过指定的操作处理集合中的每个元素. 当你需要处理动态集合并在集合发生变化时对其元素进行操作时, 此方法特别有用.
当集合发生变化时, 集合中的所有元素将被提取并传递给用户指定的操作进行处理. 如果工作被取消, 停止或发生异常, 这些元素将被重新添加回集合.
-
Watch<TSource>(ConcurrentObservableCollection<TSource> source, Action<TSource> body, bool addBackWhenWorkCanceled = true, bool addBackWhenWorkStopped = true, bool addBackWhenWorkFailed = true, string groupName = null)
监控一个可观察的集合(observable collection)并通过指定的操作处理集合中的每个元素.// Watch 之前的操作 powerPool.Watch(collection, (i) => Dosomething(i)); // Watch 之后的操作
-
source
:
要监控和处理的可观察集合 (ConcurrentObservableCollection<TSource>
). -
body
:
用于对集合中每个元素执行的操作 (Action<TSource>
). 该操作定义了对每个元素的逻辑处理. -
addBackWhenWorkCanceled
(可选): 如果工作被取消, 元素将被重新添加回集合. 默认值为true
. -
addBackWhenWorkStopped
(可选): 如果工作被停止, 元素将被重新添加回集合. 默认值为true
. -
addBackWhenWorkFailed
(可选): 如果发生异常, 元素将被重新添加回集合. 默认值为true
. -
groupName
(可选): 表示组名的字符串. 如果未提供, 则会自动生成唯一标识符. 默认值为null
.
StopWatching
用于停止监控一个可观察的集合是否发生变化. 当不再需要处理集合的更新或需要中止相关任务时, 可以调用此函数.
-
StopWatching<TSource>(ConcurrentObservableCollection<TSource> source, bool keepRunning = false, bool forceStop = false)
停止监控可观察集合的变化.// Watch 之后的操作 powerPool.StopWatching(collection);
-
source
:
要停止监控的可观察集合 (ConcurrentObservableCollection<TSource>
). -
keepRunning
(可选):
一个布尔值, 指示是否允许现有任务继续运行. 默认值为false
. -
forceStop
(可选):
一个布尔值, 指示是否强制停止所有正在运行的任务. 默认值为false
.