TaskUtilsTest.cs 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  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.Observe()).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.Observe()).IsEqualTo(1);
  25. }
  26. [Test]
  27. public async Task WhenAll_省略父进度时仍传入独立进度() {
  28. ProgressProvider? receivedProgress = null;
  29. await TaskUtils.WhenAll([
  30. child => {
  31. receivedProgress = child;
  32. return Task.CompletedTask;
  33. }
  34. ]);
  35. await Assert.That(receivedProgress is not null).IsTrue();
  36. }
  37. }