Merge branch 'master' into unitask2
commit
81d83c17c3
|
@ -352,7 +352,7 @@ After Unity 2019.3.4f1, Unity 2020.1a21, that support path query parameter of gi
|
||||||
|
|
||||||
or add `"com.cysharp.unitask": "https://github.com/Cysharp/UniTask.git?path=Assets/UniRx.Async"` to `Packages/manifest.json`.
|
or add `"com.cysharp.unitask": "https://github.com/Cysharp/UniTask.git?path=Assets/UniRx.Async"` to `Packages/manifest.json`.
|
||||||
|
|
||||||
If you want to set a target version, UniTask is using `*.*.*` release tag so you can specify a version like `#1.3.0`. For example `https://github.com/Cysharp/UniTask.git?path=Assets/UniRx.Async#1.3.0`.
|
If you want to set a target version, UniTask is using `*.*.*` release tag so you can specify a version like `#1.3.0`. For example `https://github.com/Cysharp/UniTask.git?path=Assets/UniRx.Async#1.3.1`.
|
||||||
|
|
||||||
License
|
License
|
||||||
---
|
---
|
||||||
|
|
|
@ -1,303 +0,0 @@
|
||||||
|
|
||||||
#pragma warning disable CS1591 // Missing XML comment for publicly visible type or member
|
|
||||||
|
|
||||||
using System;
|
|
||||||
using System.Diagnostics;
|
|
||||||
using System.Runtime.CompilerServices;
|
|
||||||
using System.Runtime.InteropServices;
|
|
||||||
using System.Security;
|
|
||||||
|
|
||||||
namespace Cysharp.Threading.Tasks.CompilerServices
|
|
||||||
{
|
|
||||||
[StructLayout(LayoutKind.Auto)]
|
|
||||||
public struct AsyncUniTaskMethodBuilder
|
|
||||||
{
|
|
||||||
// cache items.
|
|
||||||
AutoResetUniTaskCompletionSource promise;
|
|
||||||
IMoveNextRunner runner;
|
|
||||||
|
|
||||||
// 1. Static Create method.
|
|
||||||
[DebuggerHidden]
|
|
||||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
|
||||||
public static AsyncUniTaskMethodBuilder Create()
|
|
||||||
{
|
|
||||||
return default;
|
|
||||||
}
|
|
||||||
|
|
||||||
// 2. TaskLike Task property.
|
|
||||||
public UniTask Task
|
|
||||||
{
|
|
||||||
[DebuggerHidden]
|
|
||||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
|
||||||
get
|
|
||||||
{
|
|
||||||
if (promise != null)
|
|
||||||
{
|
|
||||||
return promise.Task;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (runner == null)
|
|
||||||
{
|
|
||||||
return UniTask.CompletedTask;
|
|
||||||
}
|
|
||||||
|
|
||||||
promise = AutoResetUniTaskCompletionSource.Create();
|
|
||||||
return promise.Task;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// 3. SetException
|
|
||||||
[DebuggerHidden]
|
|
||||||
public void SetException(Exception exception)
|
|
||||||
{
|
|
||||||
// runner is finished, return first.
|
|
||||||
if (runner != null)
|
|
||||||
{
|
|
||||||
runner.Return();
|
|
||||||
runner = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (promise != null)
|
|
||||||
{
|
|
||||||
promise.TrySetException(exception);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
promise = AutoResetUniTaskCompletionSource.CreateFromException(exception, out _);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// 4. SetResult
|
|
||||||
[DebuggerHidden]
|
|
||||||
public void SetResult()
|
|
||||||
{
|
|
||||||
// runner is finished, return first.
|
|
||||||
if (runner != null)
|
|
||||||
{
|
|
||||||
runner.Return();
|
|
||||||
runner = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (promise != null)
|
|
||||||
{
|
|
||||||
promise.TrySetResult();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// 5. AwaitOnCompleted
|
|
||||||
[DebuggerHidden]
|
|
||||||
public void AwaitOnCompleted<TAwaiter, TStateMachine>(ref TAwaiter awaiter, ref TStateMachine stateMachine)
|
|
||||||
where TAwaiter : INotifyCompletion
|
|
||||||
where TStateMachine : IAsyncStateMachine
|
|
||||||
{
|
|
||||||
if (promise == null)
|
|
||||||
{
|
|
||||||
promise = AutoResetUniTaskCompletionSource.Create();
|
|
||||||
}
|
|
||||||
if (runner == null)
|
|
||||||
{
|
|
||||||
runner = MoveNextRunner<TStateMachine>.Create(ref stateMachine);
|
|
||||||
}
|
|
||||||
|
|
||||||
awaiter.OnCompleted(runner.CallMoveNext);
|
|
||||||
}
|
|
||||||
|
|
||||||
// 6. AwaitUnsafeOnCompleted
|
|
||||||
[DebuggerHidden]
|
|
||||||
[SecuritySafeCritical]
|
|
||||||
public void AwaitUnsafeOnCompleted<TAwaiter, TStateMachine>(ref TAwaiter awaiter, ref TStateMachine stateMachine)
|
|
||||||
where TAwaiter : ICriticalNotifyCompletion
|
|
||||||
where TStateMachine : IAsyncStateMachine
|
|
||||||
{
|
|
||||||
if (promise == null)
|
|
||||||
{
|
|
||||||
promise = AutoResetUniTaskCompletionSource.Create();
|
|
||||||
}
|
|
||||||
if (runner == null)
|
|
||||||
{
|
|
||||||
runner = MoveNextRunner<TStateMachine>.Create(ref stateMachine);
|
|
||||||
}
|
|
||||||
|
|
||||||
awaiter.OnCompleted(runner.CallMoveNext);
|
|
||||||
}
|
|
||||||
|
|
||||||
// 7. Start
|
|
||||||
[DebuggerHidden]
|
|
||||||
public void Start<TStateMachine>(ref TStateMachine stateMachine)
|
|
||||||
where TStateMachine : IAsyncStateMachine
|
|
||||||
{
|
|
||||||
stateMachine.MoveNext();
|
|
||||||
}
|
|
||||||
|
|
||||||
// 8. SetStateMachine
|
|
||||||
[DebuggerHidden]
|
|
||||||
public void SetStateMachine(IAsyncStateMachine stateMachine)
|
|
||||||
{
|
|
||||||
// don't use boxed stateMachine.
|
|
||||||
}
|
|
||||||
|
|
||||||
#if DEBUG || !UNITY_2018_3_OR_NEWER
|
|
||||||
// Important for IDE debugger.
|
|
||||||
object debuggingId;
|
|
||||||
private object ObjectIdForDebugger
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
if (debuggingId == null)
|
|
||||||
{
|
|
||||||
debuggingId = new object();
|
|
||||||
}
|
|
||||||
return debuggingId;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
[StructLayout(LayoutKind.Auto)]
|
|
||||||
public struct AsyncUniTaskMethodBuilder<T>
|
|
||||||
{
|
|
||||||
// cache items.
|
|
||||||
AutoResetUniTaskCompletionSource<T> promise;
|
|
||||||
IMoveNextRunner runner;
|
|
||||||
T result;
|
|
||||||
|
|
||||||
// 1. Static Create method.
|
|
||||||
[DebuggerHidden]
|
|
||||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
|
||||||
public static AsyncUniTaskMethodBuilder<T> Create()
|
|
||||||
{
|
|
||||||
return default;
|
|
||||||
}
|
|
||||||
|
|
||||||
// 2. TaskLike Task property.
|
|
||||||
[DebuggerHidden]
|
|
||||||
public UniTask<T> Task
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
if (promise != null)
|
|
||||||
{
|
|
||||||
return promise.Task;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (runner == null)
|
|
||||||
{
|
|
||||||
return UniTask.FromResult(result);
|
|
||||||
}
|
|
||||||
|
|
||||||
promise = AutoResetUniTaskCompletionSource<T>.Create();
|
|
||||||
return promise.Task;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// 3. SetException
|
|
||||||
[DebuggerHidden]
|
|
||||||
public void SetException(Exception exception)
|
|
||||||
{
|
|
||||||
// runner is finished, return first.
|
|
||||||
if (runner != null)
|
|
||||||
{
|
|
||||||
runner.Return();
|
|
||||||
runner = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (promise == null)
|
|
||||||
{
|
|
||||||
promise = AutoResetUniTaskCompletionSource<T>.CreateFromException(exception, out _);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
promise.TrySetException(exception);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// 4. SetResult
|
|
||||||
[DebuggerHidden]
|
|
||||||
public void SetResult(T result)
|
|
||||||
{
|
|
||||||
// runner is finished, return first.
|
|
||||||
if (runner != null)
|
|
||||||
{
|
|
||||||
runner.Return();
|
|
||||||
runner = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (promise == null)
|
|
||||||
{
|
|
||||||
this.result = result;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
promise.TrySetResult(result);
|
|
||||||
}
|
|
||||||
|
|
||||||
// 5. AwaitOnCompleted
|
|
||||||
[DebuggerHidden]
|
|
||||||
public void AwaitOnCompleted<TAwaiter, TStateMachine>(ref TAwaiter awaiter, ref TStateMachine stateMachine)
|
|
||||||
where TAwaiter : INotifyCompletion
|
|
||||||
where TStateMachine : IAsyncStateMachine
|
|
||||||
{
|
|
||||||
if (promise == null)
|
|
||||||
{
|
|
||||||
promise = AutoResetUniTaskCompletionSource<T>.Create();
|
|
||||||
}
|
|
||||||
if (runner == null)
|
|
||||||
{
|
|
||||||
runner = MoveNextRunner<TStateMachine>.Create(ref stateMachine);
|
|
||||||
}
|
|
||||||
|
|
||||||
awaiter.OnCompleted(runner.CallMoveNext);
|
|
||||||
}
|
|
||||||
|
|
||||||
// 6. AwaitUnsafeOnCompleted
|
|
||||||
[DebuggerHidden]
|
|
||||||
[SecuritySafeCritical]
|
|
||||||
public void AwaitUnsafeOnCompleted<TAwaiter, TStateMachine>(ref TAwaiter awaiter, ref TStateMachine stateMachine)
|
|
||||||
where TAwaiter : ICriticalNotifyCompletion
|
|
||||||
where TStateMachine : IAsyncStateMachine
|
|
||||||
{
|
|
||||||
if (promise == null)
|
|
||||||
{
|
|
||||||
promise = AutoResetUniTaskCompletionSource<T>.Create();
|
|
||||||
}
|
|
||||||
if (runner == null)
|
|
||||||
{
|
|
||||||
runner = MoveNextRunner<TStateMachine>.Create(ref stateMachine);
|
|
||||||
}
|
|
||||||
|
|
||||||
awaiter.OnCompleted(runner.CallMoveNext);
|
|
||||||
}
|
|
||||||
|
|
||||||
// 7. Start
|
|
||||||
[DebuggerHidden]
|
|
||||||
public void Start<TStateMachine>(ref TStateMachine stateMachine)
|
|
||||||
where TStateMachine : IAsyncStateMachine
|
|
||||||
{
|
|
||||||
stateMachine.MoveNext();
|
|
||||||
}
|
|
||||||
|
|
||||||
// 8. SetStateMachine
|
|
||||||
[DebuggerHidden]
|
|
||||||
public void SetStateMachine(IAsyncStateMachine stateMachine)
|
|
||||||
{
|
|
||||||
// don't use boxed stateMachine.
|
|
||||||
}
|
|
||||||
|
|
||||||
#if DEBUG || !UNITY_2018_3_OR_NEWER
|
|
||||||
// Important for IDE debugger.
|
|
||||||
object debuggingId;
|
|
||||||
private object ObjectIdForDebugger
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
if (debuggingId == null)
|
|
||||||
{
|
|
||||||
debuggingId = new object();
|
|
||||||
}
|
|
||||||
return debuggingId;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,121 +0,0 @@
|
||||||
|
|
||||||
#pragma warning disable CS1591 // Missing XML comment for publicly visible type or member
|
|
||||||
|
|
||||||
using System;
|
|
||||||
using System.Diagnostics;
|
|
||||||
using System.Runtime.CompilerServices;
|
|
||||||
using System.Security;
|
|
||||||
|
|
||||||
namespace Cysharp.Threading.Tasks.CompilerServices
|
|
||||||
{
|
|
||||||
public struct AsyncUniTaskVoidMethodBuilder
|
|
||||||
{
|
|
||||||
IMoveNextRunner runner;
|
|
||||||
|
|
||||||
// 1. Static Create method.
|
|
||||||
[DebuggerHidden]
|
|
||||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
|
||||||
public static AsyncUniTaskVoidMethodBuilder Create()
|
|
||||||
{
|
|
||||||
return default;
|
|
||||||
}
|
|
||||||
|
|
||||||
// 2. TaskLike Task property(void)
|
|
||||||
public UniTaskVoid Task
|
|
||||||
{
|
|
||||||
[DebuggerHidden]
|
|
||||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
|
||||||
get
|
|
||||||
{
|
|
||||||
return default;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// 3. SetException
|
|
||||||
[DebuggerHidden]
|
|
||||||
public void SetException(Exception exception)
|
|
||||||
{
|
|
||||||
// runner is finished, return first.
|
|
||||||
if (runner != null)
|
|
||||||
{
|
|
||||||
runner.Return();
|
|
||||||
runner = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
UniTaskScheduler.PublishUnobservedTaskException(exception);
|
|
||||||
}
|
|
||||||
|
|
||||||
// 4. SetResult
|
|
||||||
[DebuggerHidden]
|
|
||||||
public void SetResult()
|
|
||||||
{
|
|
||||||
// runner is finished, return.
|
|
||||||
if (runner != null)
|
|
||||||
{
|
|
||||||
runner.Return();
|
|
||||||
runner = null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// 5. AwaitOnCompleted
|
|
||||||
[DebuggerHidden]
|
|
||||||
public void AwaitOnCompleted<TAwaiter, TStateMachine>(ref TAwaiter awaiter, ref TStateMachine stateMachine)
|
|
||||||
where TAwaiter : INotifyCompletion
|
|
||||||
where TStateMachine : IAsyncStateMachine
|
|
||||||
{
|
|
||||||
if (runner == null)
|
|
||||||
{
|
|
||||||
runner = MoveNextRunner<TStateMachine>.Create(ref stateMachine);
|
|
||||||
}
|
|
||||||
|
|
||||||
awaiter.OnCompleted(runner.CallMoveNext);
|
|
||||||
}
|
|
||||||
|
|
||||||
// 6. AwaitUnsafeOnCompleted
|
|
||||||
[DebuggerHidden]
|
|
||||||
[SecuritySafeCritical]
|
|
||||||
public void AwaitUnsafeOnCompleted<TAwaiter, TStateMachine>(ref TAwaiter awaiter, ref TStateMachine stateMachine)
|
|
||||||
where TAwaiter : ICriticalNotifyCompletion
|
|
||||||
where TStateMachine : IAsyncStateMachine
|
|
||||||
{
|
|
||||||
if (runner == null)
|
|
||||||
{
|
|
||||||
runner = MoveNextRunner<TStateMachine>.Create(ref stateMachine);
|
|
||||||
}
|
|
||||||
|
|
||||||
awaiter.OnCompleted(runner.CallMoveNext);
|
|
||||||
}
|
|
||||||
|
|
||||||
// 7. Start
|
|
||||||
[DebuggerHidden]
|
|
||||||
public void Start<TStateMachine>(ref TStateMachine stateMachine)
|
|
||||||
where TStateMachine : IAsyncStateMachine
|
|
||||||
{
|
|
||||||
stateMachine.MoveNext();
|
|
||||||
}
|
|
||||||
|
|
||||||
// 8. SetStateMachine
|
|
||||||
[DebuggerHidden]
|
|
||||||
public void SetStateMachine(IAsyncStateMachine stateMachine)
|
|
||||||
{
|
|
||||||
// don't use boxed stateMachine.
|
|
||||||
}
|
|
||||||
|
|
||||||
#if DEBUG || !UNITY_2018_3_OR_NEWER
|
|
||||||
// Important for IDE debugger.
|
|
||||||
object debuggingId;
|
|
||||||
private object ObjectIdForDebugger
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
if (debuggingId == null)
|
|
||||||
{
|
|
||||||
debuggingId = new object();
|
|
||||||
}
|
|
||||||
return debuggingId;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
{
|
{
|
||||||
"name": "com.cysharp.unitask",
|
"name": "com.cysharp.unitask",
|
||||||
"displayName": "UniTask",
|
"displayName": "UniTask",
|
||||||
"version": "1.3.0",
|
"version": "1.3.1",
|
||||||
"unity": "2018.3",
|
"unity": "2018.3",
|
||||||
"description": "Provides an efficient async/await integration to Unity.",
|
"description": "Provides an efficient async/await integration to Unity.",
|
||||||
"keywords": ["async/await", "async", "Task", "UniTask"],
|
"keywords": ["async/await", "async", "Task", "UniTask"],
|
||||||
|
|
Loading…
Reference in New Issue