35 lines
1015 B
C#
35 lines
1015 B
C#
using System;
|
|
using System.Threading;
|
|
|
|
namespace Ultron.Proxy
|
|
{
|
|
public sealed class DisposableScope : IDisposable
|
|
{
|
|
private readonly Action _closeScopeAction;
|
|
public DisposableScope(Action closeScopeAction)
|
|
{
|
|
_closeScopeAction = closeScopeAction;
|
|
}
|
|
public void Dispose()
|
|
{
|
|
_closeScopeAction();
|
|
}
|
|
}
|
|
|
|
public static class AsyncExtension
|
|
{
|
|
public static IDisposable CreateTimeoutScope(this IDisposable disposable, TimeSpan timeSpan)
|
|
{
|
|
var cancellationTokenSource = new CancellationTokenSource(timeSpan);
|
|
var cancellationTokenRegistration = cancellationTokenSource.Token.Register(disposable.Dispose);
|
|
return new DisposableScope(
|
|
() =>
|
|
{
|
|
cancellationTokenRegistration.Dispose();
|
|
cancellationTokenSource.Dispose();
|
|
disposable.Dispose();
|
|
});
|
|
}
|
|
}
|
|
}
|