diff --git a/Minio/ApiEndpoints/CompatibilityExtensions.cs b/Minio/ApiEndpoints/CompatibilityExtensions.cs index 0c5621b8..bcf21005 100644 --- a/Minio/ApiEndpoints/CompatibilityExtensions.cs +++ b/Minio/ApiEndpoints/CompatibilityExtensions.cs @@ -9,12 +9,27 @@ public static class CompatibilityExtensions // Used for backwards compatibility [Obsolete("Use the ListObjectsEnumAsync instead")] public static IObservable ListObjectsAsync(this IBucketOperations self, ListObjectsArgs args) + { + return self.InternalListObjectsAsync(args, CancellationToken.None); + } + + // Used for backwards compatibility (with added warning) + [Obsolete("Use the ListObjectsEnumAsync instead (also don't mix cancellation tokens and observables)")] + public static IObservable ListObjectsAsync(this IBucketOperations self, ListObjectsArgs args, + CancellationToken cancellationToken) + { + return self.InternalListObjectsAsync(args, cancellationToken); + } + + private static IObservable InternalListObjectsAsync(this IBucketOperations self, ListObjectsArgs args, + CancellationToken cancellationToken) { return Observable.Create(async (obs, ct) => { try { - await foreach (var item in self.ListObjectsEnumAsync(args, ct).ConfigureAwait(false)) + using var ctEffective = CancellationTokenSource.CreateLinkedTokenSource(cancellationToken, ct); + await foreach (var item in self.ListObjectsEnumAsync(args, ctEffective.Token).ConfigureAwait(false)) obs.OnNext(item); obs.OnCompleted(); } @@ -26,14 +41,30 @@ await foreach (var item in self.ListObjectsEnumAsync(args, ct).ConfigureAwait(fa } // Used for backwards compatibility - [Obsolete("Use the ListIncompleteUploadsEnumAsync instead")] + [Obsolete("Use the ListObjectsEnumAsync instead")] public static IObservable ListIncompleteUploads(this IObjectOperations self, ListIncompleteUploadsArgs args) + { + return self.InternalListIncompleteUploads(args, CancellationToken.None); + } + + // Used for backwards compatibility (with added warning) + [Obsolete("Use the ListIncompleteUploads instead (also don't mix cancellation tokens and observables)")] + public static IObservable ListIncompleteUploads(this IObjectOperations self, ListIncompleteUploadsArgs args, + CancellationToken cancellationToken) + { + return self.InternalListIncompleteUploads(args, cancellationToken); + } + + private static IObservable InternalListIncompleteUploads(this IObjectOperations self, + ListIncompleteUploadsArgs args, CancellationToken cancellationToken = default) { return Observable.Create(async (obs, ct) => { try { - await foreach (var item in self.ListIncompleteUploadsEnumAsync(args, ct).ConfigureAwait(false)) + using var ctEffective = CancellationTokenSource.CreateLinkedTokenSource(cancellationToken, ct); + await foreach (var item in self.ListIncompleteUploadsEnumAsync(args, ctEffective.Token) + .ConfigureAwait(false)) obs.OnNext(item); obs.OnCompleted(); }