使用作为参数传递的 cancelTokenSource 生成一个线程。
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 中,创建了 Actor 并再次尝试传递 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() 以传播到生成的演员的正确方法。