2016-08-19 6 views
0

毎分1分ごとにシステム内のさまざまなことを監視する必要があるWindowsサービスがあります(WCFサービスへの接続、データの送信など)。私は次のようになりQuartz.NETジョブを使用することを選択したことについてはTPLタスクの起動後にクリーンアップする必要があります

internal class MonitorLaunchJob : IJob 
{ 
    public void Execute(IJobExecutionContext context) 
    { 
      MonitorBase[] monitors = GetAllMonitors(); 

      foreach (var monitor in monitors) 
       var task = monitor.Launch(); 
    } 
} 

monitor.Launchは、次のシグネチャを持つメソッドです:

public abstract Task Launch() 

このメソッドのオーバーライドが長く使用することができますawait TcpClient.ConnectAsync()のような操作とそのようなもの。これらのメソッドは、多くのロギングを使用して自身のアクティビティを追跡するため、monitor.Start()によって返されたTaskを追跡する必要はありません。私は火をつけて忘れる必要がある。

今、私の質問です:これで何をしますかtaskLaunchメソッドが返されますか?それはどこからでも保存する理由を考えることができません。しかし一方で、メソッドがオブジェクトを返す場合、それを無視するのは変です。 taskが完了したら、何らかの清掃をする必要がありますか?タスクをそのままにして状態を追跡しないと、パフォーマンス上の問題に直面しますか?

+0

'Task'オブジェクトを保存するために失敗すると、タスクで発生した例外を観察することができませんことを含めて、タスクの状態を監視することができなくなることを意味し。これらの制限は、あなたにとって問題であるかもしれません。タスクをクリーンアップしないことの意味の包括的な説明については、重複したマークを参照してください。 –

答えて

関連する問題