首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >蓝色服务织物-固定时间作业

蓝色服务织物-固定时间作业
EN

Stack Overflow用户
提问于 2021-10-11 12:12:23
回答 1查看 73关注 0票数 0

我正在处理一个Service项目,在这里我需要实现一个可以在特定时间(例如每16小时或24小时)执行的计划作业。

下面是我有状态的参与者服务实现

代码语言:javascript
复制
[StatePersistence(StatePersistence.None)]
internal class Actor3 : Actor, IActor3, IRemindable
{
    public Actor3(ActorService actorService, ActorId actorId): base(actorService, actorId)
    {
    }

    public async Task RegisterReminder()
    {
        try
        {
            var previousRegistration = GetReminder("Reminder2");
            await UnregisterReminderAsync(previousRegistration);
        }
        catch (ReminderNotFoundException) { }
        var reminderRegistration = await RegisterReminderAsync("Reminder2", null, TimeSpan.FromMinutes(1), TimeSpan.FromMinutes(1));
    }

    public async Task ReceiveReminderAsync(string reminderName, byte[] state, TimeSpan dueTime, TimeSpan period)
    {
        var location = Directory.GetCurrentDirectory();
        var current = DateTime.Now;
        Thread.Sleep(15000);
        using (var writer = File.AppendText("actor.txt"))
        {
            await writer.WriteLineAsync("2 :: " + current.ToString() + " --> " + DateTime.Now.ToString());
    }
    }
}

在代码中,我注册了我的参与者服务,在注册后1分钟开始执行,然后每隔1分钟执行一次。

当我查看"actor.txt“中的日志时,我看到的如下所示:

代码语言:javascript
复制
2 :: 2021-10-11 17:31:15 --> 2021-10-11 17:31:30
2 :: 2021-10-11 17:32:30 --> 2021-10-11 17:32:45
2 :: 2021-10-11 17:33:45 --> 2021-10-11 17:34:00

从上面的日志中可以看出,

  • 第一次执行于17:31:15开始,完成于17:31:30 (耗时15秒)
  • 第二次执行于17:32:30 (从结束时间1分钟后)开始,于17:32:45完成。从上述要求出发,应该在17:32:15开始执行(因为预期的执行时间是两次执行之间的1分钟,而不是1分钟+以前的执行时间。

似乎我很难找到解决方案,我可以让演员在特定的时间执行。(即每天下午四时或凌晨十二时)

EN

回答 1

Stack Overflow用户

发布于 2021-10-12 06:22:00

考虑创建一个具有提醒功能的演员,定期触发,比方说每一分钟。(取决于所需的准确性)在其状态内,定义指定何时需要执行操作的“适当时间”。

将“到期时间”与当前时间(包括增量时间)进行比较。如果有重叠,请执行任务。

在状态内,存储最后一个执行时间戳,以避免重复执行。

定期检查未执行的执行情况。

这样,您就可以处理集群中的临时中断(服务移动、重新启动、升级等)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69526019

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档