44 lines
981 B
TypeScript
44 lines
981 B
TypeScript
const CANCEL = Symbol();
|
|
|
|
export interface CancellationToken {
|
|
readonly IsCancellationRequested: boolean;
|
|
ThrowIfCancellationRequested(): void;
|
|
}
|
|
|
|
export class CancellationTokenSource {
|
|
readonly Token: CancellationToken;
|
|
|
|
constructor() {
|
|
this.Token = new CancellationTokenImpl();
|
|
}
|
|
|
|
Cancel() {
|
|
this.Token[CANCEL]();
|
|
}
|
|
}
|
|
|
|
export class TaskCancelledException extends Error {
|
|
constructor() {
|
|
super("Task Cancelled");
|
|
Reflect.setPrototypeOf(this, TaskCancelledException.prototype);
|
|
}
|
|
}
|
|
|
|
class CancellationTokenImpl implements CancellationToken {
|
|
IsCancellationRequested: boolean;
|
|
|
|
constructor() {
|
|
this.IsCancellationRequested = false;
|
|
}
|
|
|
|
ThrowIfCancellationRequested() {
|
|
if (this.IsCancellationRequested) {
|
|
throw new TaskCancelledException();
|
|
}
|
|
}
|
|
|
|
[CANCEL]() {
|
|
this.IsCancellationRequested = true;
|
|
}
|
|
}
|