mirror of https://github.com/Cysharp/UniTask
Add WhenAll(UniTask, UniTask) overloads with 2-15 arguments
parent
39723f9489
commit
eb78c76e91
|
@ -5007,5 +5007,352 @@ namespace Cysharp.Threading.Tasks
|
|||
core.OnCompleted(continuation, state, token);
|
||||
}
|
||||
}
|
||||
|
||||
public static UniTask WhenAll(UniTask task1, UniTask task2)
|
||||
{
|
||||
return new UniTask(new WhenAllPromise(task1, task2), 0);
|
||||
}
|
||||
|
||||
public static UniTask WhenAll(UniTask task1, UniTask task2, UniTask task3)
|
||||
{
|
||||
return new UniTask(new WhenAllPromise(task1, task2, task3), 0);
|
||||
}
|
||||
|
||||
public static UniTask WhenAll(UniTask task1, UniTask task2, UniTask task3, UniTask task4)
|
||||
{
|
||||
return new UniTask(new WhenAllPromise(task1, task2, task3, task4), 0);
|
||||
}
|
||||
|
||||
public static UniTask WhenAll(UniTask task1, UniTask task2, UniTask task3, UniTask task4, UniTask task5)
|
||||
{
|
||||
return new UniTask(new WhenAllPromise(task1, task2, task3, task4, task5), 0);
|
||||
}
|
||||
|
||||
public static UniTask WhenAll(UniTask task1, UniTask task2, UniTask task3, UniTask task4, UniTask task5, UniTask task6)
|
||||
{
|
||||
return new UniTask(new WhenAllPromise(task1, task2, task3, task4, task5, task6), 0);
|
||||
}
|
||||
|
||||
public static UniTask WhenAll(UniTask task1, UniTask task2, UniTask task3, UniTask task4, UniTask task5, UniTask task6, UniTask task7)
|
||||
{
|
||||
return new UniTask(new WhenAllPromise(task1, task2, task3, task4, task5, task6, task7), 0);
|
||||
}
|
||||
|
||||
public static UniTask WhenAll(UniTask task1, UniTask task2, UniTask task3, UniTask task4, UniTask task5, UniTask task6, UniTask task7, UniTask task8)
|
||||
{
|
||||
return new UniTask(new WhenAllPromise(task1, task2, task3, task4, task5, task6, task7, task8), 0);
|
||||
}
|
||||
|
||||
public static UniTask WhenAll(UniTask task1, UniTask task2, UniTask task3, UniTask task4, UniTask task5, UniTask task6, UniTask task7, UniTask task8, UniTask task9)
|
||||
{
|
||||
return new UniTask(new WhenAllPromise(task1, task2, task3, task4, task5, task6, task7, task8, task9), 0);
|
||||
}
|
||||
|
||||
public static UniTask WhenAll(UniTask task1, UniTask task2, UniTask task3, UniTask task4, UniTask task5, UniTask task6, UniTask task7, UniTask task8, UniTask task9, UniTask task10)
|
||||
{
|
||||
return new UniTask(new WhenAllPromise(task1, task2, task3, task4, task5, task6, task7, task8, task9, task10), 0);
|
||||
}
|
||||
|
||||
public static UniTask WhenAll(UniTask task1, UniTask task2, UniTask task3, UniTask task4, UniTask task5, UniTask task6, UniTask task7, UniTask task8, UniTask task9, UniTask task10, UniTask task11)
|
||||
{
|
||||
return new UniTask(new WhenAllPromise(task1, task2, task3, task4, task5, task6, task7, task8, task9, task10, task11), 0);
|
||||
}
|
||||
|
||||
public static UniTask WhenAll(UniTask task1, UniTask task2, UniTask task3, UniTask task4, UniTask task5, UniTask task6, UniTask task7, UniTask task8, UniTask task9, UniTask task10, UniTask task11, UniTask task12)
|
||||
{
|
||||
return new UniTask(new WhenAllPromise(task1, task2, task3, task4, task5, task6, task7, task8, task9, task10, task11, task12), 0);
|
||||
}
|
||||
|
||||
public static UniTask WhenAll(UniTask task1, UniTask task2, UniTask task3, UniTask task4, UniTask task5, UniTask task6, UniTask task7, UniTask task8, UniTask task9, UniTask task10, UniTask task11, UniTask task12, UniTask task13)
|
||||
{
|
||||
return new UniTask(new WhenAllPromise(task1, task2, task3, task4, task5, task6, task7, task8, task9, task10, task11, task12, task13), 0);
|
||||
}
|
||||
|
||||
public static UniTask WhenAll(UniTask task1, UniTask task2, UniTask task3, UniTask task4, UniTask task5, UniTask task6, UniTask task7, UniTask task8, UniTask task9, UniTask task10, UniTask task11, UniTask task12, UniTask task13, UniTask task14)
|
||||
{
|
||||
return new UniTask(new WhenAllPromise(task1, task2, task3, task4, task5, task6, task7, task8, task9, task10, task11, task12, task13, task14), 0);
|
||||
}
|
||||
|
||||
public static UniTask WhenAll(UniTask task1, UniTask task2, UniTask task3, UniTask task4, UniTask task5, UniTask task6, UniTask task7, UniTask task8, UniTask task9, UniTask task10, UniTask task11, UniTask task12, UniTask task13, UniTask task14, UniTask task15)
|
||||
{
|
||||
return new UniTask(new WhenAllPromise(task1, task2, task3, task4, task5, task6, task7, task8, task9, task10, task11, task12, task13, task14, task15), 0);
|
||||
}
|
||||
|
||||
sealed partial class WhenAllPromise : IUniTaskSource
|
||||
{
|
||||
public WhenAllPromise(UniTask task1, UniTask task2)
|
||||
{
|
||||
TaskTracker.TrackActiveTask(this, 3);
|
||||
|
||||
this.tasksLength = 2;
|
||||
this.completeCount = 0;
|
||||
|
||||
StartTask(task1);
|
||||
StartTask(task2);
|
||||
}
|
||||
|
||||
public WhenAllPromise(UniTask task1, UniTask task2, UniTask task3)
|
||||
{
|
||||
TaskTracker.TrackActiveTask(this, 3);
|
||||
|
||||
this.tasksLength = 3;
|
||||
this.completeCount = 0;
|
||||
|
||||
StartTask(task1);
|
||||
StartTask(task2);
|
||||
StartTask(task3);
|
||||
}
|
||||
|
||||
public WhenAllPromise(UniTask task1, UniTask task2, UniTask task3, UniTask task4)
|
||||
{
|
||||
TaskTracker.TrackActiveTask(this, 3);
|
||||
|
||||
this.tasksLength = 4;
|
||||
this.completeCount = 0;
|
||||
|
||||
StartTask(task1);
|
||||
StartTask(task2);
|
||||
StartTask(task3);
|
||||
StartTask(task4);
|
||||
}
|
||||
|
||||
public WhenAllPromise(UniTask task1, UniTask task2, UniTask task3, UniTask task4, UniTask task5)
|
||||
{
|
||||
TaskTracker.TrackActiveTask(this, 3);
|
||||
|
||||
this.tasksLength = 5;
|
||||
this.completeCount = 0;
|
||||
|
||||
StartTask(task1);
|
||||
StartTask(task2);
|
||||
StartTask(task3);
|
||||
StartTask(task4);
|
||||
StartTask(task5);
|
||||
}
|
||||
|
||||
public WhenAllPromise(UniTask task1, UniTask task2, UniTask task3, UniTask task4, UniTask task5, UniTask task6)
|
||||
{
|
||||
TaskTracker.TrackActiveTask(this, 3);
|
||||
|
||||
this.tasksLength = 6;
|
||||
this.completeCount = 0;
|
||||
|
||||
StartTask(task1);
|
||||
StartTask(task2);
|
||||
StartTask(task3);
|
||||
StartTask(task4);
|
||||
StartTask(task5);
|
||||
StartTask(task6);
|
||||
}
|
||||
|
||||
public WhenAllPromise(UniTask task1, UniTask task2, UniTask task3, UniTask task4, UniTask task5, UniTask task6, UniTask task7)
|
||||
{
|
||||
TaskTracker.TrackActiveTask(this, 3);
|
||||
|
||||
this.tasksLength = 7;
|
||||
this.completeCount = 0;
|
||||
|
||||
StartTask(task1);
|
||||
StartTask(task2);
|
||||
StartTask(task3);
|
||||
StartTask(task4);
|
||||
StartTask(task5);
|
||||
StartTask(task6);
|
||||
StartTask(task7);
|
||||
}
|
||||
|
||||
public WhenAllPromise(UniTask task1, UniTask task2, UniTask task3, UniTask task4, UniTask task5, UniTask task6, UniTask task7, UniTask task8)
|
||||
{
|
||||
TaskTracker.TrackActiveTask(this, 3);
|
||||
|
||||
this.tasksLength = 8;
|
||||
this.completeCount = 0;
|
||||
|
||||
StartTask(task1);
|
||||
StartTask(task2);
|
||||
StartTask(task3);
|
||||
StartTask(task4);
|
||||
StartTask(task5);
|
||||
StartTask(task6);
|
||||
StartTask(task7);
|
||||
StartTask(task8);
|
||||
}
|
||||
|
||||
public WhenAllPromise(UniTask task1, UniTask task2, UniTask task3, UniTask task4, UniTask task5, UniTask task6, UniTask task7, UniTask task8, UniTask task9)
|
||||
{
|
||||
TaskTracker.TrackActiveTask(this, 3);
|
||||
|
||||
this.tasksLength = 9;
|
||||
this.completeCount = 0;
|
||||
|
||||
StartTask(task1);
|
||||
StartTask(task2);
|
||||
StartTask(task3);
|
||||
StartTask(task4);
|
||||
StartTask(task5);
|
||||
StartTask(task6);
|
||||
StartTask(task7);
|
||||
StartTask(task8);
|
||||
StartTask(task9);
|
||||
}
|
||||
|
||||
public WhenAllPromise(UniTask task1, UniTask task2, UniTask task3, UniTask task4, UniTask task5, UniTask task6, UniTask task7, UniTask task8, UniTask task9, UniTask task10)
|
||||
{
|
||||
TaskTracker.TrackActiveTask(this, 3);
|
||||
|
||||
this.tasksLength = 10;
|
||||
this.completeCount = 0;
|
||||
|
||||
StartTask(task1);
|
||||
StartTask(task2);
|
||||
StartTask(task3);
|
||||
StartTask(task4);
|
||||
StartTask(task5);
|
||||
StartTask(task6);
|
||||
StartTask(task7);
|
||||
StartTask(task8);
|
||||
StartTask(task9);
|
||||
StartTask(task10);
|
||||
}
|
||||
|
||||
public WhenAllPromise(UniTask task1, UniTask task2, UniTask task3, UniTask task4, UniTask task5, UniTask task6, UniTask task7, UniTask task8, UniTask task9, UniTask task10, UniTask task11)
|
||||
{
|
||||
TaskTracker.TrackActiveTask(this, 3);
|
||||
|
||||
this.tasksLength = 11;
|
||||
this.completeCount = 0;
|
||||
|
||||
StartTask(task1);
|
||||
StartTask(task2);
|
||||
StartTask(task3);
|
||||
StartTask(task4);
|
||||
StartTask(task5);
|
||||
StartTask(task6);
|
||||
StartTask(task7);
|
||||
StartTask(task8);
|
||||
StartTask(task9);
|
||||
StartTask(task10);
|
||||
StartTask(task11);
|
||||
}
|
||||
|
||||
public WhenAllPromise(UniTask task1, UniTask task2, UniTask task3, UniTask task4, UniTask task5, UniTask task6, UniTask task7, UniTask task8, UniTask task9, UniTask task10, UniTask task11, UniTask task12)
|
||||
{
|
||||
TaskTracker.TrackActiveTask(this, 3);
|
||||
|
||||
this.tasksLength = 12;
|
||||
this.completeCount = 0;
|
||||
|
||||
StartTask(task1);
|
||||
StartTask(task2);
|
||||
StartTask(task3);
|
||||
StartTask(task4);
|
||||
StartTask(task5);
|
||||
StartTask(task6);
|
||||
StartTask(task7);
|
||||
StartTask(task8);
|
||||
StartTask(task9);
|
||||
StartTask(task10);
|
||||
StartTask(task11);
|
||||
StartTask(task12);
|
||||
}
|
||||
|
||||
public WhenAllPromise(UniTask task1, UniTask task2, UniTask task3, UniTask task4, UniTask task5, UniTask task6, UniTask task7, UniTask task8, UniTask task9, UniTask task10, UniTask task11, UniTask task12, UniTask task13)
|
||||
{
|
||||
TaskTracker.TrackActiveTask(this, 3);
|
||||
|
||||
this.tasksLength = 13;
|
||||
this.completeCount = 0;
|
||||
|
||||
StartTask(task1);
|
||||
StartTask(task2);
|
||||
StartTask(task3);
|
||||
StartTask(task4);
|
||||
StartTask(task5);
|
||||
StartTask(task6);
|
||||
StartTask(task7);
|
||||
StartTask(task8);
|
||||
StartTask(task9);
|
||||
StartTask(task10);
|
||||
StartTask(task11);
|
||||
StartTask(task12);
|
||||
StartTask(task13);
|
||||
}
|
||||
|
||||
public WhenAllPromise(UniTask task1, UniTask task2, UniTask task3, UniTask task4, UniTask task5, UniTask task6, UniTask task7, UniTask task8, UniTask task9, UniTask task10, UniTask task11, UniTask task12, UniTask task13, UniTask task14)
|
||||
{
|
||||
TaskTracker.TrackActiveTask(this, 3);
|
||||
|
||||
this.tasksLength = 14;
|
||||
this.completeCount = 0;
|
||||
|
||||
StartTask(task1);
|
||||
StartTask(task2);
|
||||
StartTask(task3);
|
||||
StartTask(task4);
|
||||
StartTask(task5);
|
||||
StartTask(task6);
|
||||
StartTask(task7);
|
||||
StartTask(task8);
|
||||
StartTask(task9);
|
||||
StartTask(task10);
|
||||
StartTask(task11);
|
||||
StartTask(task12);
|
||||
StartTask(task13);
|
||||
StartTask(task14);
|
||||
}
|
||||
|
||||
public WhenAllPromise(UniTask task1, UniTask task2, UniTask task3, UniTask task4, UniTask task5, UniTask task6, UniTask task7, UniTask task8, UniTask task9, UniTask task10, UniTask task11, UniTask task12, UniTask task13, UniTask task14, UniTask task15)
|
||||
{
|
||||
TaskTracker.TrackActiveTask(this, 3);
|
||||
|
||||
this.tasksLength = 15;
|
||||
this.completeCount = 0;
|
||||
|
||||
StartTask(task1);
|
||||
StartTask(task2);
|
||||
StartTask(task3);
|
||||
StartTask(task4);
|
||||
StartTask(task5);
|
||||
StartTask(task6);
|
||||
StartTask(task7);
|
||||
StartTask(task8);
|
||||
StartTask(task9);
|
||||
StartTask(task10);
|
||||
StartTask(task11);
|
||||
StartTask(task12);
|
||||
StartTask(task13);
|
||||
StartTask(task14);
|
||||
StartTask(task15);
|
||||
}
|
||||
|
||||
private void StartTask(UniTask task)
|
||||
{
|
||||
UniTask.Awaiter awaiter;
|
||||
try
|
||||
{
|
||||
awaiter = task.GetAwaiter();
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
core.TrySetException(ex);
|
||||
return;
|
||||
}
|
||||
|
||||
if (awaiter.IsCompleted)
|
||||
{
|
||||
TryInvokeContinuation(this, awaiter);
|
||||
}
|
||||
else
|
||||
{
|
||||
awaiter.SourceOnCompleted(state =>
|
||||
{
|
||||
using (var t = (StateTuple<WhenAllPromise, UniTask.Awaiter>)state)
|
||||
{
|
||||
TryInvokeContinuation(t.Item1, t.Item2);
|
||||
}
|
||||
}, StateTuple.Create(this, awaiter));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -144,7 +144,7 @@ namespace Cysharp.Threading.Tasks
|
|||
}
|
||||
}
|
||||
|
||||
sealed class WhenAllPromise : IUniTaskSource
|
||||
sealed partial class WhenAllPromise : IUniTaskSource
|
||||
{
|
||||
int completeCount;
|
||||
int tasksLength;
|
||||
|
|
|
@ -112,6 +112,37 @@ namespace Cysharp.Threading.TasksTests
|
|||
c2.Should().Be(AsyncUnit.Default);
|
||||
});
|
||||
|
||||
[UnityTest]
|
||||
public IEnumerator WhenAllVoid() => UniTask.ToCoroutine(async () =>
|
||||
{
|
||||
bool aResult = false;
|
||||
bool bResult = false;
|
||||
bool cResult = false;
|
||||
|
||||
var a = UniTask.Create(async () =>
|
||||
{
|
||||
await UniTask.DelayFrame(1);
|
||||
aResult = true;
|
||||
});
|
||||
|
||||
var b = UniTask.Create(async () =>
|
||||
{
|
||||
await UniTask.DelayFrame(2);
|
||||
bResult = true;
|
||||
});
|
||||
|
||||
var c = UniTask.Create(async () =>
|
||||
{
|
||||
await UniTask.DelayFrame(3);
|
||||
cResult = true;
|
||||
});
|
||||
|
||||
await UniTask.WhenAll(a, b, c);
|
||||
aResult.Should().Be(true);
|
||||
bResult.Should().Be(true);
|
||||
cResult.Should().Be(true);
|
||||
});
|
||||
|
||||
[UnityTest]
|
||||
public IEnumerator WhenAny() => UniTask.ToCoroutine(async () =>
|
||||
{
|
||||
|
|
Loading…
Reference in New Issue