【发布时间】:2020-02-18 17:01:13
【问题描述】:
我创建了一个 Service Fabric 应用程序。 RunAsync() 方法中有一个长期运行的作业,例如“LoadData(),它将数百万条记录从数据库迁移到 ServiceFabric 字典”。
根据 MSDN 文档,想要实现在服务启动时运行的后台任务的服务应使用其逻辑“RunAsync(CancellationToken)”覆盖此方法
取消令牌用于监视取消请求,它存在于 RunAsync() 并关闭服务。所以我在我的项目中使用了 CancellationToken。
这是我的代码
RunAsync (System.Threading.CancellationToken cancellationToken);
{
LoadData(CancellationToken);
}
Async Task LoadData(CancellationToken)
{
Method1(CancellationToken) -- Aync call
Method2() -- Normal call
Method3() -- Normal call
}
如您所见,我有 Method1,它是一个异步调用,它作为单独的线程运行,因此相同的令牌被传递给此方法,因为主线程不会知道子线程。 但是 Method2 和 Method3 只是函数调用所以 CancellationToken 没有被传递,因为它们是在主线程的上下文中运行的。
我有几个关于 Service Fabric 中 CancellationToken 用法的问题。 1. 我们是否需要为从长时间运行的方法(异步/同步)调用的所有方法传递 CancellationToken? 2. 我处理CancellationToken的方式是正确的还是需要修改什么?
【问题讨论】:
标签: azure asp.net-core azure-service-fabric