Terraria v1.4.4.9
Terraria source code documentation
All Classes Namespaces Files Functions Variables Enumerations Enumerator Properties Events Macros
OrderPreservingSpoolingTask.cs
Go to the documentation of this file.
2
4
5internal sealed class OrderPreservingSpoolingTask<TInputOutput, TKey> : SpoolingTaskBase
6{
8
10
11 private OrderPreservingSpoolingTask(int taskIndex, QueryTaskGroupState groupState, Shared<TInputOutput[]> results, SortHelper<TInputOutput> sortHelper)
12 : base(taskIndex, groupState)
13 {
14 _results = results;
15 _sortHelper = sortHelper;
16 }
17
18 internal static void Spool(QueryTaskGroupState groupState, PartitionedStream<TInputOutput, TKey> partitions, Shared<TInputOutput[]> results, TaskScheduler taskScheduler)
19 {
20 int maxToRunInParallel = partitions.PartitionCount - 1;
22 Task task = new Task(delegate
23 {
24 for (int j = 0; j < maxToRunInParallel; j++)
25 {
26 QueryTask queryTask = new OrderPreservingSpoolingTask<TInputOutput, TKey>(j, groupState, results, sortHelpers[j]);
27 queryTask.RunAsynchronously(taskScheduler);
28 }
29 QueryTask queryTask2 = new OrderPreservingSpoolingTask<TInputOutput, TKey>(maxToRunInParallel, groupState, results, sortHelpers[maxToRunInParallel]);
30 queryTask2.RunSynchronously(taskScheduler);
31 });
32 groupState.QueryBegin(task);
33 task.RunSynchronously(taskScheduler);
34 for (int i = 0; i < sortHelpers.Length; i++)
35 {
36 sortHelpers[i].Dispose();
37 }
38 groupState.QueryEnd(userInitiatedDispose: false);
39 }
40
41 protected override void SpoolingWork()
42 {
43 TInputOutput[] value = _sortHelper.Sort();
44 if (!_groupState.CancellationState.MergedCancellationToken.IsCancellationRequested && _taskIndex == 0)
45 {
46 _results.Value = value;
47 }
48 }
49}
static void Spool(QueryTaskGroupState groupState, PartitionedStream< TInputOutput, TKey > partitions, Shared< TInputOutput[]> results, TaskScheduler taskScheduler)
OrderPreservingSpoolingTask(int taskIndex, QueryTaskGroupState groupState, Shared< TInputOutput[]> results, SortHelper< TInputOutput > sortHelper)
void QueryEnd(bool userInitiatedDispose)
Task RunAsynchronously(TaskScheduler taskScheduler)
Definition QueryTask.cs:37
Task RunSynchronously(TaskScheduler taskScheduler)
Definition QueryTask.cs:30
QueryTaskGroupState _groupState
Definition QueryTask.cs:10
static SortHelper< TInputOutput, TKey >[] GenerateSortHelpers(PartitionedStream< TInputOutput, TKey > partitions, QueryTaskGroupState groupState)
Definition SortHelper.cs:46