Table of Contents

Class CancellationGuard

Namespace
NanoByte.Common.Threading
Assembly
NanoByte.Common.dll

Ensures that a block of code running on a background thread cleanly exits before a System.Threading.CancellationTokenSource.Cancel() call completes.

[SuppressMessage("Microsoft.Design", "CA1063:ImplementIDisposableCorrectly", Justification = "IDisposable is only implemented here to support using() blocks.")]
[MustDisposeResource]
public class CancellationGuard
Inheritance
object
CancellationGuard
Extension Methods

Examples

This class is best used in a using-block:

using (new CancellationGuard(cancellationToken))
{
    // Your code
}

Remarks

Do not use this if System.Threading.CancellationTokenSource.Cancel() is called from the same System.Threading.SynchronizationContext the guarded code is running under. This could lead to deadlocks.

Constructors

CancellationGuard(CancellationToken)

Registers a callback for the cancellationToken that blocks calls to System.Threading.CancellationTokenSource.Cancel() until Dispose() has been called.

public CancellationGuard(CancellationToken cancellationToken)

Parameters

cancellationToken CancellationToken

Used to signal cancellation requests.

CancellationGuard(CancellationToken, TimeSpan)

Registers a callback for the cancellationToken that blocks calls to System.Threading.CancellationTokenSource.Cancel() until Dispose() has been called.

public CancellationGuard(CancellationToken cancellationToken, TimeSpan timeout)

Parameters

cancellationToken CancellationToken

Used to signal cancellation requests.

timeout TimeSpan

A timespan after which the cancellation will be considered completed even if Dispose() has not been called yet.

Methods

Dispose()

Releases the block and allows System.Threading.CancellationTokenSource.Cancel() to complete.

[SuppressMessage("Microsoft.Design", "CA1063:ImplementIDisposableCorrectly", Justification = "IDisposable is only implemented here to support using() blocks.")]
[SuppressMessage("Microsoft.Usage", "CA1816:CallGCSuppressFinalizeCorrectly", Justification = "IDisposable is only implemented here to support using() blocks.")]
public void Dispose()