/// <summary> /// Calls Parallel.ForEach() with appropriate ParallelOptions and exception handling. /// </summary> public static ParallelLoopResult ParallelForEach <TSource>(this MauiAsyncTask asyncTask, IEnumerable <TSource> source, Action <TSource> body) { return(Parallel.ForEach(source, ParallelOptions(asyncTask), s => { try { body(s); } catch (Exception exc) { asyncTask.LogCodedError("MAUI0000", exc.ToString()); asyncTask.Cancel(); } })); }
/// <summary> /// Calls Task.Run<T>() with a proper CancellationToken. /// </summary> public static Task <TSource> RunTask <TSource>(this MauiAsyncTask asyncTask, Func <TSource> body) => Task.Run(body, asyncTask.CancellationToken);
/// <summary> /// Calls Task.Run() with a proper CancellationToken. /// </summary> public static Task RunTask(this MauiAsyncTask asyncTask, Action body) => Task.Run(body, asyncTask.CancellationToken);
static ParallelOptions ParallelOptions(MauiAsyncTask asyncTask) => new ParallelOptions { CancellationToken = asyncTask.CancellationToken, TaskScheduler = TaskScheduler.Default, };