| File: Utilities\ExceptionUtilities.cs | Web Access |
| Project: src\src\Libraries\Microsoft.Extensions.AI.Evaluation.Console\Microsoft.Extensions.AI.Evaluation.Console.csproj (Microsoft.Extensions.AI.Evaluation.Console) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. using System; using System.Collections.Generic; namespace Microsoft.Extensions.AI.Evaluation.Console.Utilities; internal static class ExceptionUtilities { internal static bool IsCancellation(this Exception exception) => exception switch { OperationCanceledException => true, AggregateException aggregateException => aggregateException.ContainsOnlyCancellations(), _ => false }; private static bool ContainsOnlyCancellations(this AggregateException exception) { var toCheck = new Stack<Exception>(); toCheck.Push(exception); var seen = new HashSet<Exception>(); bool containsAtLeastOneCancellation = false; while (toCheck.TryPop(out Exception? current)) { // To avoid infinite loops, ignore exceptions that were already seen. if (seen.Add(current)) { if (current is AggregateException aggregateException) { foreach (var innerException in aggregateException.InnerExceptions) { toCheck.Push(innerException); } } else if (current is OperationCanceledException) { containsAtLeastOneCancellation = true; } else { return false; } } } return containsAtLeastOneCancellation; } }