Orleans 2.0 官方文档 —— 4.10.5 Grains -> 高级功能 -> Cancellation Tokens

grain的cancellation tokens

Orleans运行时提供称为grain cancellation token的机制,使开发人员能够取消正在执行的grain操作。

描述

GrainCancellationToken是标准.NET System.Threading.CancellationToken的包装器,它支持线程、线程池工作项或Task对象之间的协作取消,并且可以作为grain方法的参数来传递。

GrainCancellationTokenSource是一个对象,它通过其Token属性,提供了一个cancellation token,并通过调用它的Cancel方法,发送cancellation 消息。

用法

  • 实例化CancellationTokenSource对象,该对象管理cancellation 通知,并向各个cancellation token发送这些通知。
        var tcs = new GrainCancellationTokenSource();
  • 将GrainCancellationTokenSource.Token属性返回的token,传递给侦听cancellation的每个grain方法。
        var waitTask = grain.LongIoWork(tcs.Token, TimeSpan.FromSeconds(10));
  • 一个可取消的grain操作,需要处理GrainCancellationToken底层的CancellationToken属性,就像在任何其他的.NET代码中一样。
        public async Task LongIoWork(GrainCancellationToken tc, TimeSpan delay)
        {
            while(!tc.CancellationToken.IsCancellationRequested)
            {
                 await IoOperation(tc.CancellationToken);
            }
        }
  • 调用GrainCancellationTokenSource.Cancel方法,以启动取消。
        await tcs.Cancel();
  • 完成GrainCancellationTokenSource对象后,调用Dispose方法。
        tcs.Dispose();

重要注意事项:

  • GrainCancellationTokenSource.Cancel方法返回Task,为了确保取消,必须在暂时的通信失败的情况下,重试取消调用。
  • System.Threading.CancellationToken中注册的回调,在注册它们的激活体中,遵循在grain激活体中的单线程执行保证的约束。
  • 每个GrainCancellationToken,都可以被传递在多个方法调用中。

你可能感兴趣的:(Orleans)