public static IDisposable Create()

in TeamCity.CSharpInteractive/Disposable.cs [19:57]


    public static IDisposable Create(params IDisposable[] disposables) =>
        Create((IEnumerable<IDisposable>)disposables);

    public static IDisposable Create(IEnumerable<IDisposable> disposables) =>
        new CompositeDisposable(disposables);

    private sealed class DisposableAction : IDisposable
    {
        private readonly Action _action;
        private readonly object? _key;
        private int _counter;

        public DisposableAction(Action action, object? key = null)
        {
            _action = action;
            _key = key ?? action;
        }

        public void Dispose()
        {
            if (Interlocked.Increment(ref _counter) != 1) return;
            try
            {
                _action();
            }
            catch
            { }
        }

        public override bool Equals(object? obj)
        {
            if (ReferenceEquals(null, obj)) return false;
            if (ReferenceEquals(this, obj)) return true;
            return obj is DisposableAction other && Equals(_key, other._key);
        }

        public override int GetHashCode() =>
            _key != null ? _key.GetHashCode() : 0;
    }