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;
}