2014-09-28 3 views
-1

Я обновляю свой код для использования Async, проблема в том, что для Timer.Elapsed требуется тип возврата void, но это в основном не позволяет ждать, поэтому код не ждет и заканчивается слишком рано, прежде чем все будет сделано.Async с таймером

Код:

public static void Main(string[] args) 
{ 
    Timer timer; 

    timer = new System.Timers.Timer(); 
    timer.Interval = 3000; 
    timer.Elapsed += OnTimerAsync; 
    timer.Enabled = true; 
    timer.Start(); 

    Console.WriteLine("Press the Enter key to exit the program... "); 
    Console.ReadLine(); 
    Console.WriteLine("Terminating the application..."); 
} 

public async static void OnTimerAsync(object sender, ElapsedEventArgs args) 
{ 
    await ExecuteWorkflowAsync(); 
} 

private async static Task<bool> ExecuteWorkflowAsync() 
{ 
    List<Schedule> schedulesToRun; 

    try 
    { 
     await JobLoader.LoadAsync(schedulesToRun); 
    } 
    catch (Exception ex) 
    { 
     // Log ex 
    } 

    return true; 
} 

Есть ли способ использовать объект Timer с асинхронным?

+2

Что именно заканчивает слишком рано? – SLaks

+1

BTW, timer.Enabled = true; и timer.Start(); делайте то же самое. –

+2

Непонятно, что вы подразумеваете под «завершением слишком рано». Ваш код выглядит отлично. –

ответ

0

Попробуйте это:

public async static void OnTimerAsync(object sender, ElapsedEventArgs args) 
{ 
    timer.Enabled = false; 
    await ExecuteWorkflowAsync(); 
    timer.Enabled = true; 
} 
+0

К сожалению, он все еще не дождался. Я думаю, что я собираюсь сбросить таймер и просто использовать Task.Delay в цикле для замены таймера. – Josh

Смежные вопросы