2015-07-31 6 views
1

Требование - вызывать метод через каждые 12 часов. Код ниже вызова метода должен продолжать работать в другом потоке, как мы можем это достичь?Как выполнить метод через каждые 12 часов внутри консольного приложения

void ExecuteAfterTimeInterval() 
{ 
    //some code 
} 

public static void main(string[] args) 
{ 
    //call the below method after every 12 hours 
    ExecuteAfterTimeInterval(); 


// run the below code in separate thread 
    // some code here 
    //some code here 
    //some code here 

} 
+7

Почему вы не используете планировщик для запуска приложения каждые 12 часов? –

+1

Согласовано с @BrianRasmussen. Таймер в консольном приложении очень ненадежный. Что делать, если кто-то закрывает окно консоли или приложение выходит из строя? Что делать, если компьютер перезагружается? Если вы настаиваете на этом, просто найдите любой из классов Timer в .NET framework. – vesan

+0

Они не искали задачу, которая должна выполняться каждые 12 часов. В ней задействованы 2 задачи, которые нужно запускать вместе. 1 работает каждые 12 часов, после чего выполняется постоянная работа. – EJD

ответ

1

Дайте это попробовать. Найдите // SET BREAK POINT ЗДЕСЬ и запустите.

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using System.Threading; 

namespace MyConsole 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      Program console = new Program(); 
      console.MyMethodAsync(); 
     } 

     void ExecuteAfterTimeInterval() 
     { 
      //some code 
     } 

     public async Task MyMethodAsync() 
     { 
      Task<int> longRunningTask = LongRunningOperationAsync(); 

      // run the below code in separate thread 
      //some code here 
      //some code here 
      for (int i = 0; i < 10000000000; i++) 
      { 
       Console.WriteLine(i); //SET BREAK POINT HERE 
      } 
      //some code here 

      //and now we call await on the task 
      int result = await longRunningTask; 
     } 

     public async Task<int> LongRunningOperationAsync() // assume we return an int from this long running operation 
     { 

      bool retry = true; 

      using (AutoResetEvent wait = new AutoResetEvent(false)) 
      { 
       while (retry) 
       { 

        //Do Work here 
        //await Task.Delay(43200000); //12 hour delay 
        await Task.Delay(3000); //SET BREAK POINT HERE 
       } 
      } 

      return 1; 
     } 
    } 
} 
Смежные вопросы