Поток порождается с cancellationTokenSource, переданным в качестве аргумента.
RootStatefulService
{
var cts= new CancellationTokenSource();
ThreadStart starter = ()=> ParentMethod(Message.Value, cts);
Thread t = new Thread(starter);
t.Start();
...
// When there is cancel request from client, below code runs
cts.Token.Cancel();
}
В этом ParentMethod создается Актер, который снова пытается передать CancellationToken.
ParentMethod(SomeValue value, CancellationTokenSource cts)
{
var actorWithToken = ActorProxy.Create<IActorWithToken>(
actorId,
new Uri(ActorWithTokenUrl));
actorWithToken.StartLongRunningTask(someId, cts);
cts.Token.Register(() => { StopImmediatelyAndTerminateActor});
}
Это пользовательский токен, и по запросу клиента вызывается RootStatefulService.cts.Cancel (). От службы с отслеживанием состояния до субъекта я не уверен, доставлена ли ссылка на источник токенов отмены, чтобы вызов Token.Cancel () в корневой службе распространялся вплоть до метода субъекта Token.Register. Я не был успешным. И если это не сработает, пожалуйста, ответьте правильно, чтобы вызывать пользовательский Token.Cancel () для распространения вниз к порожденному актеру.