Parallel Execution - ZjzMisaka/PowerThreadPool.zh-CN.Wiki GitHub Wiki

允许使用多个线程高效地并行执行循环. 此功能支持索引循环 (For), 基于集合的循环 (ForEach) 以及对 ConcurrentObservableCollection 的监控 (Watch).

For

For 设计用于并行执行循环, 在指定的索引范围内迭代. 它可以处理不同类型的集合, 且有各种灵活的重载.

重载

  1. For(int start, int end, Action<int> body, int step = 1, string groupName = null)
    执行从startend的循环, 并对每个索引执行指定的操作.
    // Do something before loop
    powerPool.For(0, 10, (i) => DoSomething(i)).Wait();
    // Do something after loop
  2. For<TSource>(int start, int end, IList<TSource> source, Action<TSource> body, int step = 1, string groupName = null)
    在集合上执行从startend的循环, 对每个元素执行指定的操作.
    // Do something before loop
    powerPool.For(0, 10, list, (item) => DoSomething(item)).Wait();
    // Do something after loop
  3. For<TSource>(int start, int end, IList<TSource> source, Action<TSource, int> body, int step = 1, string groupName = null)
    在集合上执行从startend的循环,对每个元素及其索引执行指定的操作.
    // 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 被设计用于并行迭代集合, 对每个元素应用指定的操作. 它适用于循环需要同时处理集合元素的场景.

重载

  1. 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
  2. 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.

Returns

Watch

Watch 用于监控一个可观察的集合(observable collection)是否发生变化, 并通过指定的操作处理集合中的每个元素. 当你需要处理动态集合并在集合发生变化时对其元素进行操作时, 此方法特别有用.
当集合发生变化时, 集合中的所有元素将被提取并传递给用户指定的操作进行处理. 如果工作被取消, 停止或发生异常, 这些元素将被重新添加回集合.

重载

  1. 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 用于停止监控一个可观察的集合是否发生变化. 当不再需要处理集合的更新或需要中止相关任务时, 可以调用此函数.

重载

  1. StopWatching<TSource>(ConcurrentObservableCollection<TSource> source, bool keepRunning = false, bool forceStop = false)
    停止监控可观察集合的变化.
    // Watch 之后的操作
    powerPool.StopWatching(collection);

参数

  • source:
    要停止监控的可观察集合 (ConcurrentObservableCollection<TSource>).
  • keepRunning (可选):
    一个布尔值, 指示是否允许现有任务继续运行. 默认值为 false.
  • forceStop (可选):
    一个布尔值, 指示是否强制停止所有正在运行的任务. 默认值为 false.
⚠️ **GitHub.com Fallback** ⚠️