2013-08-02 8 views
8

私はC#4.0に移植しているC#2.0コードを持っています。 System.ThreadPool.QueueueUserWorkItemの代わりにSystem.Taskを使用したいと思います。私はSystem.Threading.Timerの代わりにSystem.Taskを使用したいと思います。定期的なタスクを作成する方法

定期的にSystem.Taskを作成するにはどうすればよいですか? System.TaskまたはSystem.TaskFactoryに何も表示されません。検討のための

敬具、

pKumara

+0

は 'Timer'と何が問題なのですか?必要に応じて、タイマーコールバックを使用して新しいタスクを開始することができます。 –

+1

[System.Threading.Timerのタスクベースの置き換えはありますか?]の複製が可能ですか?(http://stackoverflow.com/questions/4890915/is-there-a-task-based-replacement-for-system-threading-タイマー) –

答えて

3

あなたは、タイマーの観察可能なシーケンスを返しますObservable.Timerを試すことができます。

18

Observable.IntervalまたはObservable.Timerを使用します。タイマーは、あなたがdueTimeで渡すことを許可します

e.q.

  // Repeat every 2 seconds. 
     IObservable<long> observable = Observable.Interval(TimeSpan.FromSeconds(2)); 

     // Token for cancelation 
     CancellationTokenSource source = new CancellationTokenSource(); 

     // Create task to execute. 
     Action action = (() => Console.WriteLine("Action started at: {0}", DateTime.Now)); 
     Action resumeAction = (() => Console.WriteLine("Second action started at {0}", DateTime.Now)); 

     // Subscribe the obserable to the task on execution. 
     observable.Subscribe(x => { Task task = new Task(action); task.Start(); 
             task.ContinueWith(c => resumeAction()); 
     }, source.Token); 

enter image description here

+0

多くのありがとう。私はあなたの答えを受け入れようとしていますが、不明なエラーが発生しました。 –

+0

奇妙ですが、あなたの質問に答えてうれしいです! –

+2

Observable名前空間を利用できるようにするには、NuGetパッケージから 'Reactive Extensions - Query library'を追加する必要があります。 – douglaslps

関連する問題