毎分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
を追跡する必要はありません。私は火をつけて忘れる必要がある。
今、私の質問です:これで何をしますかtask
Launch
メソッドが返されますか?それはどこからでも保存する理由を考えることができません。しかし一方で、メソッドがオブジェクトを返す場合、それを無視するのは変です。 task
が完了したら、何らかの清掃をする必要がありますか?タスクをそのままにして状態を追跡しないと、パフォーマンス上の問題に直面しますか?
'Task'オブジェクトを保存するために失敗すると、タスクで発生した例外を観察することができませんことを含めて、タスクの状態を監視することができなくなることを意味し。これらの制限は、あなたにとって問題であるかもしれません。タスクをクリーンアップしないことの意味の包括的な説明については、重複したマークを参照してください。 –