【问题标题】:How to start a Task class instance of MS TPL with some delay?如何延迟启动 MS TPL 的任务类实例?
【发布时间】:2014-04-28 22:34:04
【问题描述】:

哪种方式更自然地启动 MS TPL 的 Task 类实例?

Task logManager = Task.Factory.StartNew(() => { // Some code }, TaskCreationOptions.LongRunning);

我只是想稍后再启动它......

谢谢!

【问题讨论】:

标签: c# .net task-parallel-library


【解决方案1】:

使用计时器,这样就不会在延迟时间内浪费线程处理时间:

Task logManager = null;
new Timer((state) =>
    {
        logManager = Task.Factory.StartNew(() => { /* Some code*/}, TaskCreationOptions.LongRunning);
    }, null, TimeSpan.FromSeconds(2), TimeSpan.FromMilliseconds(-1));

【讨论】:

  • 我认为你的解决方案是最好的!
【解决方案2】:
int msDelay = 1000;
Task task = Task.Factory
    .StartNew(() => { Thread.Sleep(msDelay); })
    .ContinueWith((Task starter) => { MessageBox.Show("Started after delay"); }, , TaskContinuationOptions.LongRunning);

【讨论】:

    【解决方案3】:
    Task logManager = Task.Factory.StartNew(() => { Thread.Sleep(1000); }, TaskCreationOptions.LongRunning);
    

    TaskCreationOptions.LongRunning 将使用专用线程,因此在这种情况下阻塞不会影响任何其他线程

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-27
      • 2018-10-21
      • 1970-01-01
      • 2018-12-21
      相关资源
      最近更新 更多