龙腾猫跃 3 месяцев назад
Родитель
Сommit
d3daf1988f
2 измененных файлов с 8 добавлено и 8 удалено
  1. 2 2
      Shared/General/Workers/RedoableWorker.cs
  2. 6 6
      Shared/Utils/TaskUtils.cs

+ 2 - 2
Shared/General/Workers/RedoableWorker.cs

@@ -178,7 +178,7 @@ public abstract class RedoableWorkerBase<TOut>(Func<CancellationToken?, Progress
             (_, timedOut) => completionSource.TrySetResult(!timedOut), null, millisecondsTimeout, executeOnlyOnce: true);
         using var cancellationRegistration = cancellationToken.Register(() => completionSource.TrySetCanceled(cancellationToken));
         try {
-            return await completionSource.Task;
+            return await completionSource.Task.NoCapture();
         } finally {
             waitHandle.Unregister(null);
         }
@@ -207,4 +207,4 @@ public class RedoableWorker : RedoableWorkerBase<NoType?> {
 }
 
 /// <summary>指示没有该类型,用于泛型参数。</summary>
-public class NoType { }
+public class NoType { }

+ 6 - 6
Shared/Utils/TaskUtils.cs

@@ -16,7 +16,7 @@ public static class TaskUtils {
         var progressEach = 1d / taskList.Count;
         return Task.WhenAll(taskList.Select(async (task, index) => {
             var cp = progress?.SplitBy(progressEach)[0];
-            await task(cp).ConfigureAwait(false);
+            await task(cp).NoCapture();
             cp?.Finish();
         }));
     }
@@ -33,7 +33,7 @@ public static class TaskUtils {
         var progressEach = 1d / taskList.Count;
         return Task.WhenAll(taskList.Select(async (task, index) => {
             var cp = progress?.SplitBy(progressEach)[0];
-            var result = await task(cp).ConfigureAwait(false);
+            var result = await task(cp).NoCapture();
             cp?.Finish();
             return result;
         }));
@@ -66,7 +66,7 @@ public static class TaskUtils {
                         if (!enumerator.MoveNext()) return;
                         item = enumerator.Current;
                     }
-                    await body(item, cp).ConfigureAwait(false);
+                    await body(item, cp).NoCapture();
                 }
             } catch {
                 try {
@@ -76,7 +76,7 @@ public static class TaskUtils {
                 throw;
             }
         }
-        await TaskUtils.WhenAll(Enumerable.Repeat(WorkerAsync, maxDegreeOfParallelism), progress).ConfigureAwait(false);
+        await TaskUtils.WhenAll(Enumerable.Repeat(WorkerAsync, maxDegreeOfParallelism), progress).NoCapture();
     }
 
     /// <summary>
@@ -110,7 +110,7 @@ public static class TaskUtils {
         var timeoutTask = Task.Delay(hasTimeout ? timeoutMs!.Value : Timeout.Infinite);
         var cancelTask = Task.Delay(Timeout.Infinite, cancellationToken);
         Logger.Trace($"等待程序 {program.Id} 完成");
-        var completedTask = await Task.WhenAny(task, timeoutTask, cancelTask);
+        var completedTask = await Task.WhenAny(task, timeoutTask, cancelTask).NoCapture();
         if (completedTask != task) {
             try {
                 if (!program.HasExited) program.Kill();
@@ -119,7 +119,7 @@ public static class TaskUtils {
             if (completedTask == cancelTask) throw new OperationCanceledException(cancellationToken);
             throw new TimeoutException($"运行程序超时:{file} {arguments}");
         }
-        return (await outputTask + await errorTask, program.ExitCode);
+        return (await outputTask.NoCapture() + await errorTask.NoCapture(), program.ExitCode);
     }
 
 }