使用反应式扩展按计划运行任务



我看到了很多例子,展示了如何通过计时器使用RX框架运行任务,例如

var timer = Observable
            .Timer(TimeSpan.FromSeconds(3), TimeSpan.FromSeconds(3))
            .Subscribe(q =>
                {   
                    Console.WriteLine("do something here " + q);
                });

我想知道这是否可能,如果可能,我如何使用RX框架按时间表运行任务,例如,每天午夜12点。

您所写的基本上就是它。使用以DateTimeOffset作为开始时间的Timer重载:

DateTimeOffset startTime = midnight;
TimeSpan interval = TimeSpan.FromDays(1);
var timer = Observable.Timer(startTime, interval).Subscribe(q => Console.WriteLine("do something"));

尽管我很喜欢RX,但我怀疑它不适合这份工作。您需要的是Windows任务计划,它是一种操作系统服务。它有点像Unix cron服务。将时间表编写为XML文件,如

<?xml version="1.0" ?>
<!--
This sample schedules a task to start on a daily basis.
-->
<Task xmlns="http://schemas.microsoft.com/windows/2004/02/mit/task">
    <RegistrationInfo>
        <Date>2005-10-11T13:21:17-08:00</Date>
        <Author>AuthorName</Author>
        <Version>1.0.0</Version>
        <Description>Notepad starts every day.</Description>
    </RegistrationInfo>
    <Triggers>
        <CalendarTrigger>
            <StartBoundary>2005-10-11T13:21:17-08:00</StartBoundary>
            <EndBoundary>2006-01-01T00:00:00-08:00</EndBoundary>
            <Repetition>
                <Interval>PT1M</Interval>
                <Duration>PT4M</Duration>
            </Repetition>
            <ScheduleByDay>
                <DaysInterval>1</DaysInterval>
            </ScheduleByDay>
        </CalendarTrigger>
    </Triggers>
    <Principals>
        <Principal>
            <UserId>Administrator</UserId>
            <LogonType>InteractiveToken</LogonType>
        </Principal>
    </Principals>
    <Settings>
        <Enabled>true</Enabled>
        <AllowStartOnDemand>true</AllowStartOnDemand>
        <AllowHardTerminate>true</AllowHardTerminate>
    </Settings>
    <Actions>
        <Exec>
            <Command>notepad.exe</Command>
        </Exec>
    </Actions>
</Task>

安排每日notepad.exe运行。很明显,您可以用自己选择的应用程序(包括用C#编写的应用程序)替换notepade.exe

为什么不使用RX来做到这一点呢。考虑到这是一个需要长时间运行而不会崩溃的应用程序,最好将其委托给由操作系统控制的专门服务。

相关内容

  • 没有找到相关文章

最新更新