2016-08-12 45 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