async void SmartDispatcherTimer_Tick(object sender, EventArgs e) { if (TickTask == null) { Debug.WriteLine("No task set!"); return; } if (IsRunning && !IsReentrant) { // previous task hasn't completed Debug.WriteLine("Task already running"); return; } try { // we're running it now IsRunning = true; Debug.WriteLine("Running Task"); await TickTask.Invoke(); Debug.WriteLine("Task Completed"); } catch (Exception) { Debug.WriteLine("Task Failed"); } finally { // allow it to run again IsRunning = false; } }
async void SmartDispatcherTimer_Tick(object sender, object e) { if (TickTask == null || IsRunning) { return; } try { IsRunning = true; await TickTask.Invoke(); } finally { IsRunning = false; } }
public void Dispose() { TickTask.Abort(); Stop(); }