You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
125 lines
3.7 KiB
125 lines
3.7 KiB
using System; |
|
using System.Diagnostics; |
|
using System.Runtime.CompilerServices; |
|
using System.Security; |
|
|
|
namespace ET |
|
{ |
|
public struct ETAsyncTaskMethodBuilder |
|
{ |
|
private ETTask tcs; |
|
|
|
// 1. Static Create method. |
|
[DebuggerHidden] |
|
public static ETAsyncTaskMethodBuilder Create() |
|
{ |
|
ETAsyncTaskMethodBuilder builder = new ETAsyncTaskMethodBuilder() { tcs = ETTask.Create(true) }; |
|
return builder; |
|
} |
|
|
|
// 2. TaskLike Task property. |
|
[DebuggerHidden] |
|
public ETTask Task => this.tcs; |
|
|
|
// 3. SetException |
|
[DebuggerHidden] |
|
public void SetException(Exception exception) |
|
{ |
|
this.tcs.SetException(exception); |
|
} |
|
|
|
// 4. SetResult |
|
[DebuggerHidden] |
|
public void SetResult() |
|
{ |
|
this.tcs.SetResult(); |
|
} |
|
|
|
// 5. AwaitOnCompleted |
|
[DebuggerHidden] |
|
public void AwaitOnCompleted<TAwaiter, TStateMachine>(ref TAwaiter awaiter, ref TStateMachine stateMachine) where TAwaiter : INotifyCompletion where TStateMachine : IAsyncStateMachine |
|
{ |
|
awaiter.OnCompleted(stateMachine.MoveNext); |
|
} |
|
|
|
// 6. AwaitUnsafeOnCompleted |
|
[DebuggerHidden] |
|
[SecuritySafeCritical] |
|
public void AwaitUnsafeOnCompleted<TAwaiter, TStateMachine>(ref TAwaiter awaiter, ref TStateMachine stateMachine) where TAwaiter : ICriticalNotifyCompletion where TStateMachine : IAsyncStateMachine |
|
{ |
|
awaiter.OnCompleted(stateMachine.MoveNext); |
|
} |
|
|
|
// 7. Start |
|
[DebuggerHidden] |
|
public void Start<TStateMachine>(ref TStateMachine stateMachine) where TStateMachine : IAsyncStateMachine |
|
{ |
|
stateMachine.MoveNext(); |
|
} |
|
|
|
// 8. SetStateMachine |
|
[DebuggerHidden] |
|
public void SetStateMachine(IAsyncStateMachine stateMachine) |
|
{ |
|
} |
|
} |
|
|
|
public struct ETAsyncTaskMethodBuilder<T> |
|
{ |
|
private ETTask<T> tcs; |
|
|
|
// 1. Static Create method. |
|
[DebuggerHidden] |
|
public static ETAsyncTaskMethodBuilder<T> Create() |
|
{ |
|
ETAsyncTaskMethodBuilder<T> builder = new ETAsyncTaskMethodBuilder<T>() { tcs = ETTask<T>.Create(true) }; |
|
return builder; |
|
} |
|
|
|
// 2. TaskLike Task property. |
|
[DebuggerHidden] |
|
public ETTask<T> Task => this.tcs; |
|
|
|
// 3. SetException |
|
[DebuggerHidden] |
|
public void SetException(Exception exception) |
|
{ |
|
this.tcs.SetException(exception); |
|
} |
|
|
|
// 4. SetResult |
|
[DebuggerHidden] |
|
public void SetResult(T ret) |
|
{ |
|
this.tcs.SetResult(ret); |
|
} |
|
|
|
// 5. AwaitOnCompleted |
|
[DebuggerHidden] |
|
public void AwaitOnCompleted<TAwaiter, TStateMachine>(ref TAwaiter awaiter, ref TStateMachine stateMachine) where TAwaiter : INotifyCompletion where TStateMachine : IAsyncStateMachine |
|
{ |
|
awaiter.OnCompleted(stateMachine.MoveNext); |
|
} |
|
|
|
// 6. AwaitUnsafeOnCompleted |
|
[DebuggerHidden] |
|
[SecuritySafeCritical] |
|
public void AwaitUnsafeOnCompleted<TAwaiter, TStateMachine>(ref TAwaiter awaiter, ref TStateMachine stateMachine) where TAwaiter : ICriticalNotifyCompletion where TStateMachine : IAsyncStateMachine |
|
{ |
|
awaiter.OnCompleted(stateMachine.MoveNext); |
|
} |
|
|
|
// 7. Start |
|
[DebuggerHidden] |
|
public void Start<TStateMachine>(ref TStateMachine stateMachine) where TStateMachine : IAsyncStateMachine |
|
{ |
|
stateMachine.MoveNext(); |
|
} |
|
|
|
// 8. SetStateMachine |
|
[DebuggerHidden] |
|
public void SetStateMachine(IAsyncStateMachine stateMachine) |
|
{ |
|
} |
|
} |
|
} |