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
48 public static void End(IAsyncResult asyncResult)
49 {
51 if (task != null)
52 {
53 task.GetAwaiter().GetResult();
54 }
55 else
56 {
58 }
59 }
60
62 {
64 {
65 return task.GetAwaiter().GetResult();
66 }
68 return default(TResult);
69 }
70
72 {
73 return (asyncResult as TaskAsyncResult)?._task;
74 }
75
76 [DoesNotReturn]
78 {
79 throw (asyncResult == null) ? new ArgumentNullException("asyncResult") : new ArgumentException(null, "asyncResult");
80 }
81}
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
static void End(IAsyncResult asyncResult)
Definition TaskToApm.cs:48
new ConfiguredTaskAwaitable< TResult > ConfigureAwait(bool continueOnCapturedContext)
Definition Task.cs:226