Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches
QueryTask.cs
Go to the documentation of this file.
3
5
6internal abstract class QueryTask
7{
8 protected int _taskIndex;
9
11
12 private static readonly Action<object> s_runTaskSynchronouslyDelegate = RunTaskSynchronously;
13
14 private static readonly Action<object> s_baseWorkDelegate = delegate(object o)
15 {
16 ((QueryTask)o).BaseWork(null);
17 };
18
19 protected QueryTask(int taskIndex, QueryTaskGroupState groupState)
20 {
21 _taskIndex = taskIndex;
22 _groupState = groupState;
23 }
24
25 private static void RunTaskSynchronously(object o)
26 {
27 ((QueryTask)o).BaseWork(null);
28 }
29
30 internal Task RunSynchronously(TaskScheduler taskScheduler)
31 {
33 task.RunSynchronously(taskScheduler);
34 return task;
35 }
36
37 internal Task RunAsynchronously(TaskScheduler taskScheduler)
38 {
39 return Task.Factory.StartNew(s_baseWorkDelegate, this, CancellationToken.None, TaskCreationOptions.PreferFairness | TaskCreationOptions.AttachedToParent, taskScheduler);
40 }
41
42 private void BaseWork(object unused)
43 {
44 PlinqEtwProvider.Log.ParallelQueryFork(_groupState.QueryId);
45 try
46 {
47 Work();
48 }
49 finally
50 {
51 PlinqEtwProvider.Log.ParallelQueryJoin(_groupState.QueryId);
52 }
53 }
54
55 protected abstract void Work();
56}
Task RunAsynchronously(TaskScheduler taskScheduler)
Definition QueryTask.cs:37
Task RunSynchronously(TaskScheduler taskScheduler)
Definition QueryTask.cs:30
QueryTask(int taskIndex, QueryTaskGroupState groupState)
Definition QueryTask.cs:19
static void RunTaskSynchronously(object o)
Definition QueryTask.cs:25
QueryTaskGroupState _groupState
Definition QueryTask.cs:10
static readonly Action< object > s_baseWorkDelegate
Definition QueryTask.cs:14
void BaseWork(object unused)
Definition QueryTask.cs:42
static readonly Action< object > s_runTaskSynchronouslyDelegate
Definition QueryTask.cs:12
static new TaskFactory< TResult > Factory
Definition Task.cs:56