Azure 服务结构中的取消令牌使用
我已经创建了一个服务结构应用程序。RunAsync()方法中有一个长期运行的作业,如“LoadData(),它将数百万条记录从数据库迁移到ServiceFabric dictionary” 根据MSDN文档,要实现后台任务(在服务启动时运行)的服务应使用其逻辑“RunAsync(CancellationToken)”覆盖此方法 取消令牌用于监视取消请求,它存在于RunAsync()中并关闭服务。所以我在我的项目中使用了CancellationToken 这是我的密码 如您所见,我有Method1,这是一个异步调用,它作为一个单独的线程运行,因此传递给该方法的令牌与主线程不知道子线程的令牌相同。 但是,Method2和Method3只是函数调用,因此不会传递CancellationToken,因为在主线程的上下文中运行 我有几个关于服务结构中CancellationToken使用的问题。 1.我们是否需要为从长时间运行的方法(异步/同步)调用的所有方法传递CancellationToken? 2.我处理CancellationToken的方式是正确的,还是需要修改任何内容 我们是否需要为从长时间运行的方法(异步/同步)调用的所有方法传递CancellationToken 是的,如果你能尊重它。如果方法不处理它,那么将它传递给方法是没有意义的 我处理CancellationToken的方式是正确的,还是需要修改任何内容 很难说,我们需要知道你的代码是做什么的 如果服务要关闭,它将使用CancellationToken取消任何挂起的工作。如果有任何接受CancellationToken的异步调用,则应将其传递给该方法,以便在请求取消时退出 如果您有一些其他方法,如Azure 服务结构中的取消令牌使用,azure,asp.net-core,azure-service-fabric,Azure,Asp.net Core,Azure Service Fabric,我已经创建了一个服务结构应用程序。RunAsync()方法中有一个长期运行的作业,如“LoadData(),它将数百万条记录从数据库迁移到ServiceFabric dictionary” 根据MSDN文档,要实现后台任务(在服务启动时运行)的服务应使用其逻辑“RunAsync(CancellationToken)”覆盖此方法 取消令牌用于监视取消请求,它存在于RunAsync()中并关闭服务。所以我在我的项目中使用了CancellationToken 这是我的密码 如您所见,我有Method1
Method1()
,并且它执行了一些长时间运行的工作,那么当使用CancellationToken.IsCancellationRequested
或CancellationToken.throwifccancellationrequested
请求取消时,您仍然可以退出。如果请求取消,后者将抛出操作CanceledException
例如,您可以执行以下操作:
public void Method1(CancellationToken cancellationToken)
{
// some work
if(cancellationToken.IsCancellationRequested)
return;
// some more work
if (cancellationToken.IsCancellationRequested)
return;
// some more work
}
这取决于您决定该方法是否有一些逻辑点需要检查是否取消,或者该方法是否太快,不会产生太大影响
顺便说一下,这不是特定于service fabric的,您可以找到更多文档
public void Method1(CancellationToken cancellationToken)
{
// some work
if(cancellationToken.IsCancellationRequested)
return;
// some more work
if (cancellationToken.IsCancellationRequested)
return;
// some more work
}