我有Windows服務需要每分鐘監控系統中的不同事情(連接一些WCF服務,發送一些數據等)。我需要在啓動TPL任務之後做清理工作
對於我選擇使用這一下Quartz.NET工作如下:
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'對象意味着你將無法監視任務的狀態,包括您將無法觀察到發生在任務的任何異常。這些限制可能會或可能不會成爲您的問題。請參閱標記的副本,以更全面地說明不清理任務的含義。 –