Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches
AsyncOperation.cs
Go to the documentation of this file.
5
7
8internal abstract class AsyncOperation
9{
11
13
14 private static void AvailableSentinel(object s)
15 {
16 }
17
18 private static void CompletedSentinel(object s)
19 {
20 }
21
26
31
36}
38{
40
41 private readonly bool _pooled;
42
43 private readonly bool _runContinuationsAsynchronously;
44
45 private volatile int _completionReserved;
46
48
50
52
53 private object _continuationState;
54
55 private object _schedulingContext;
56
58
59 private short _currentId;
60
61 public AsyncOperation<TResult> Next { get; set; }
62
64
66
68
70
86
87 public ValueTaskSourceStatus GetStatus(short token)
88 {
89 if (_currentId != token)
90 {
92 }
93 if (IsCompleted)
94 {
95 if (_error != null)
96 {
98 {
99 return ValueTaskSourceStatus.Faulted;
100 }
101 return ValueTaskSourceStatus.Canceled;
102 }
103 return ValueTaskSourceStatus.Succeeded;
104 }
105 return ValueTaskSourceStatus.Pending;
106 }
107
108 public TResult GetResult(short token)
109 {
110 if (_currentId != token)
111 {
113 }
114 if (!IsCompleted)
115 {
117 }
119 TResult result = _result;
120 _currentId++;
121 if (_pooled)
122 {
124 }
125 error?.Throw();
126 return result;
127 }
128
129 void IValueTaskSource.GetResult(short token)
130 {
131 if (_currentId != token)
132 {
134 }
135 if (!IsCompleted)
136 {
138 }
140 _currentId++;
141 if (_pooled)
142 {
144 }
145 error?.Throw();
146 }
147
148 public bool TryOwnAndReset()
149 {
151 {
152 _continuationState = null;
153 _result = default(TResult);
154 _error = null;
155 _schedulingContext = null;
156 _executionContext = null;
157 return true;
158 }
159 return false;
160 }
161
163 {
164 if (_currentId != token)
165 {
167 }
168 if (_continuationState != null)
169 {
171 }
173 if ((flags & ValueTaskSourceOnCompletedFlags.FlowExecutionContext) != 0)
174 {
176 }
179 if ((flags & ValueTaskSourceOnCompletedFlags.UseSchedulingContext) != 0)
180 {
183 {
185 }
186 else
187 {
191 {
193 }
194 }
195 }
197 if (action == null)
198 {
199 return;
200 }
202 {
204 }
205 if (_schedulingContext == null)
206 {
207 if (_executionContext == null)
208 {
210 }
211 else
212 {
214 }
215 }
216 else if (synchronizationContext != null)
217 {
219 {
221 keyValuePair.Key(keyValuePair.Value);
223 }
224 else
225 {
227 }
228 }
229
231 {
233 {
235 return _completionReserved == 0;
236 }
237 return true;
238 }
239
241 {
244 {
245 _result = item;
247 return true;
248 }
249 return false;
250 }
251
253 {
256 {
259 return true;
260 }
261 return false;
262 }
263
274
276 {
278 {
280 }
281 return true;
282 }
283
284 private void SignalCompletion()
285 {
287 {
288 return;
289 }
290 if (_schedulingContext == null)
291 {
293 {
295 return;
296 }
297 }
299 {
301 {
303 {
304 ((AsyncOperation<TResult>)s).SetCompletionAndInvokeContinuation();
305 }, this);
306 return;
307 }
308 }
309 else
310 {
313 {
314 Task.Factory.StartNew(delegate(object s)
315 {
316 ((AsyncOperation<TResult>)s).SetCompletionAndInvokeContinuation();
317 }, this, CancellationToken.None, TaskCreationOptions.DenyChildAttach, taskScheduler);
318 return;
319 }
320 }
322 }
323
341
346
351
356
357 private static void QueueUserWorkItem(Action<object> action, object state)
358 {
360 }
361
366}
static ExceptionDispatchInfo Capture(Exception source)
static string InvalidOperation_IncompleteAsyncOperation
Definition SR.cs:16
static string InvalidOperation_IncorrectToken
Definition SR.cs:106
static string InvalidOperation_MultipleContinuations
Definition SR.cs:108
Definition SR.cs:7
AsyncOperation(bool runContinuationsAsynchronously, CancellationToken cancellationToken=default(CancellationToken), bool pooled=false)
static readonly Action< object > s_availableSentinel
void OnCompleted(Action< object > continuation, object state, short token, ValueTaskSourceOnCompletedFlags flags)
static readonly Action< object > s_completedSentinel
static CancellationTokenRegistration UnsafeRegister(CancellationToken cancellationToken, Action< object > action, object state)
bool TrySetCanceled(CancellationToken cancellationToken=default(CancellationToken))
bool TrySetException(Exception exception)
readonly CancellationTokenRegistration _registration
ValueTaskSourceStatus GetStatus(short token)
static void QueueUserWorkItem(Action< object > action, object state)
void UnsafeQueueUserWorkItem(Action< object > action, object state)
static ? ExecutionContext Capture()
static void Run(ExecutionContext executionContext, ContextCallback callback, object? state)
static int CompareExchange(ref int location1, int value, int comparand)
static ? SynchronizationContext Current
static new TaskFactory< TResult > Factory
Definition Task.cs:56
static bool QueueUserWorkItem(WaitCallback callBack)
static bool UnsafeQueueUserWorkItem(WaitCallback callBack, object? state)
static void Write(ref bool location, bool value)
Definition Volatile.cs:74