Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches
TaskToApm.cs
Go to the documentation of this file.
2
4
5internal static class TaskToApm
6{
7 internal sealed class TaskAsyncResult : IAsyncResult
8 {
9 internal readonly Task _task;
10
11 private readonly AsyncCallback _callback;
12
13 public object AsyncState { get; }
14
15 public bool CompletedSynchronously { get; }
16
17 public bool IsCompleted => _task.IsCompleted;
18
19 public WaitHandle AsyncWaitHandle => ((IAsyncResult)_task).AsyncWaitHandle;
20
21 internal TaskAsyncResult(Task task, object state, AsyncCallback callback)
22 {
23 _task = task;
25 if (task.IsCompleted)
26 {
28 callback?.Invoke(this);
29 }
30 else if (callback != null)
31 {
32 _callback = callback;
33 _task.ConfigureAwait(continueOnCapturedContext: false).GetAwaiter().OnCompleted(InvokeCallback);
34 }
35 }
36
37 private void InvokeCallback()
38 {
39 _callback(this);
40 }
41 }
42
43 public static IAsyncResult Begin(Task task, AsyncCallback callback, object state)
44 {
45 return new TaskAsyncResult(task, state, callback);
46 }
47
49 {
51 {
52 return task.GetAwaiter().GetResult();
53 }
55 return default(TResult);
56 }
57
59 {
60 return (asyncResult as TaskAsyncResult)?._task;
61 }
62
63 [DoesNotReturn]
65 {
66 throw (asyncResult == null) ? new ArgumentNullException("asyncResult") : new ArgumentException(null, "asyncResult");
67 }
68}
TaskAsyncResult(Task task, object state, AsyncCallback callback)
Definition TaskToApm.cs:21
static Task GetTask(IAsyncResult asyncResult)
Definition TaskToApm.cs:71
static TResult End< TResult >(IAsyncResult asyncResult)
Definition TaskToApm.cs:61
static void ThrowArgumentException(IAsyncResult asyncResult)
Definition TaskToApm.cs:77
static IAsyncResult Begin(Task task, AsyncCallback callback, object state)
Definition TaskToApm.cs:43
new ConfiguredTaskAwaitable< TResult > ConfigureAwait(bool continueOnCapturedContext)
Definition Task.cs:226