ControlledExecution.Run(Action, CancellationToken) Method
Definition
Important
Some information relates to prerelease product that may be substantially modified before it’s released. Microsoft makes no warranties, express or implied, with respect to the information provided here.
Caution
ControlledExecution.Run method may corrupt the process and should not be used in production code.
Runs code that can be aborted asynchronously.
public:
static void Run(Action ^ action, System::Threading::CancellationToken cancellationToken);
[System.Obsolete("ControlledExecution.Run method may corrupt the process and should not be used in production code.", DiagnosticId="SYSLIB0046", UrlFormat="https://aka.ms/dotnet-warnings/{0}")]
public static void Run (Action action, System.Threading.CancellationToken cancellationToken);
[<System.Obsolete("ControlledExecution.Run method may corrupt the process and should not be used in production code.", DiagnosticId="SYSLIB0046", UrlFormat="https://aka.ms/dotnet-warnings/{0}")>]
static member Run : Action * System.Threading.CancellationToken -> unit
Public Shared Sub Run (action As Action, cancellationToken As CancellationToken)
Parameters
- action
- Action
The delegate that represents the code to execute.
- cancellationToken
- CancellationToken
The cancellation token that can be used to abort execution.
- Attributes
Exceptions
The method is not supported on this platform.
The action
argument is null
.
The current thread is already running the Run(Action, CancellationToken) method.
The execution was aborted.
Remarks
This method enables aborting arbitrary managed code in a non-cooperative manner by throwing an exception in the thread executing that code. While the exception may be caught by the code, it is re-thrown at the end of catch
blocks until the execution flow returns to the ControlledExecution.Run
method.
Execution of the code is not guaranteed to abort immediately, or at all. This situation can occur, for example, if a thread is stuck executing unmanaged code or the catch
and finally
blocks that are called as part of the abort procedure, thereby indefinitely delaying the abort. Furthermore, execution may not be aborted immediately if the thread is currently executing a catch
or finally
block.
Aborting code at an unexpected location may corrupt the state of data structures in the process and lead to unpredictable results. For that reason, this method should not be used in production code and calling it produces a compile-time warning.