【问题标题】:C# Libraries for timed actions用于定时操作的 C# 库
【发布时间】:2011-05-24 10:01:00
【问题描述】:

您知道任何允许您对一系列操作进行排序的 C# 库吗?每个动作在前一个动作完成时执行,或者更好的是,在特定时间间隔发生后执行。

谢谢。

【问题讨论】:

  • 我不太确定您在此处寻找什么,按顺序调用的方法无需努力调用多个线程,将按顺序运行,而在最后一个方法结束时将调用下一个方法。如果您想在方法之间放置预定义的暂停,可以通过使当前线程休眠给定秒数或循环退出条件来完成,该退出条件要求它在给定时间或之后开启。你能澄清你的要求吗?
  • IMO 很明显他想要做什么。它甚至是一个如此普遍的要求,以至于微软已经通过它在任务并行库中的任务对象上的 .ContinueWith() 方法实现了对它的专门支持。

标签: c# sequential orchestration


【解决方案1】:

http://msdn.microsoft.com/en-us/library/dd537609.aspx

Task.ContinueWith 方法让 您指定要在何时开始的任务 前面的任务完成。

例子

var task = Task.Factory.StartNew(() => GetFileData())
                                       .ContinueWith((x) => Analyze(x.Result))
                                       .ContinueWith((y) => Summarize(y.Result));

【讨论】:

  • 你应该提到,Task 仅在 .net 4 中可用
  • 正确,但除非问题中另有说明,否则假定代码能够在最新的 .Net 版本上运行应该是安全的。
【解决方案2】:

计时请尝试quartz.net。对于同步动作,使用例如。事件,waithandlesMonitor.Wait()Monitor.Pulse() ...

否则你可以处理一组动作,例如

var methods = new List<Func>
{
    FooMethod1,
    FooMethod2
}
foreach (var method in methods)
{
    method.Invoke();
}

但这只有在您没有调节器方法(顺序处理)或您的方法不应该相互了解的情况下才有意义。

【讨论】:

    【解决方案3】:

    对于计划任务,您正在寻找支持 cron 作业的库。这是我在一个项目中使用的一个。

    http://blog.bobcravens.com/2009/10/an-event-based-cron-scheduled-job-in-c/

    存在很多库。我发现许多功能丰富且有点沉重。

    希望这会有所帮助。

    鲍勃

    【讨论】:

      猜你喜欢
      • 2010-09-07
      • 1970-01-01
      • 2023-03-06
      • 2020-01-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多