2016-08-12 4 views
0

に私は、コンストラクタ(System.Threadingから)タイマーに渡される非同期コールバック、持っている:峠非同期コールバックタイマーのコンストラクタ

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?ない、非同期の原因デリゲート

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

それは本当にタイマーのこの混合を行うには意味がないと非同期/待っています。 async/awaitの世界でタイマーの振る舞いをするには、ループ本体のどこかで 'await Task.Delay(someValue)'を使ってループを作り、ループ本体からあなたのメソッドを呼び出してください。 – spender

答えて

2

はラムダにその入出力のparamを省略するためにどのような方法がありますように私はちょうど私のhandlerを渡すことができますか?

確かに、ちょうど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