TaskUtilsTest.cs 1.1 KB

12345678910111213141516171819202122232425262728293031
  1. namespace MeloongCore.Tests;
  2. public class TaskUtilsTest : TestBase {
  3. [Test]
  4. public async Task WhenAll_汇总等权子进度并保持结果顺序() {
  5. var progress = new ProgressProvider();
  6. var continueSecond = new TaskCompletionSource<object?>(TaskCreationOptions.RunContinuationsAsynchronously);
  7. ProgressProvider? firstProgress = null, secondProgress = null;
  8. var whenAll = TaskUtils.WhenAll<int>([
  9. child => {
  10. firstProgress = child;
  11. return Task.FromResult(1);
  12. },
  13. async child => {
  14. secondProgress = child;
  15. await continueSecond.Task;
  16. return 2;
  17. }
  18. ], progress);
  19. await Assert.That(ReferenceEquals(firstProgress, secondProgress)).IsFalse();
  20. await Assert.That(progress.GetIncrement()).IsEqualTo(0.5);
  21. continueSecond.SetResult(null);
  22. var results = await whenAll;
  23. await Assert.That(string.Join(",", results)).IsEqualTo("1,2");
  24. await Assert.That(progress.GetIncrement()).IsEqualTo(1);
  25. }
  26. }