2016-08-12 66 views
0

我有異步回調,這是傳遞到定時器(從的System.Threading)構造函數:通異步回調到Timer構造

private async Task HandleTimerCallback(object state) 
    { 
     if (timer == null) return; 

     if (asynTaskCallback != null) 
     { 
      await HandleAsyncTaskTimerCallback(state); 
     } 
     else 
     { 
      HandleSyncTimerCallback(state); 
     } 
    } 

和定時器:

timer = new Timer(async o => await HandleTimerCallback(o), state, CommonConstants.InfiniteTimespan, 
      CommonConstants.InfiniteTimespan); 

有什麼辦法省略那個o param在lambda?原因不-異步我可以通過我的handler爲代表

timer = new Timer(HandleTimerCallback, state, CommonConstants.InfiniteTimespan, 
      CommonConstants.InfiniteTimespan); 
+0

這真的沒有意義做定時器和異步/等待這一混合。如果你想在async/await世界中使用定時器行爲,只需在循環體內的某處使用'await Task.Delay(someValue)'循環,並從循環體調用你的方法。 – spender

回答

2

有沒有辦法省略拉姆達爲o PARAM?

當然,只是定義事件處理程序的方法async void

private async void HandleTimerCallback(object state) 
+0

你的意思是沒有方法體?爲什麼不是「任務」而是「無效」? – demo

+1

@demo:因爲['TimerCallback'返回類型爲'void'](https://msdn.microsoft.com/en-us/library/system.threading.timercallback(v = vs.110).aspx) 。 –

+0

謝謝,我明白了 – demo