2016-08-19 32 views
0

我有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。我需要開火併忘記。

現在,我的問題是:我該怎麼辦taskLaunch方法返回?我想不出有什麼理由將它存儲在任何地方,因爲這是一場即忘即忘的操作。但另一方面,如果一個方法返回一個對象,那麼忽略它就很奇怪。當task完成後,我是否需要進行任何清理?如果我離開任務並且從不跟蹤其狀態,我會面對任何性能問題嗎?

+0

未按規定保存'Task'對象意味着你將無法監視任務的狀態,包括您將無法觀察到發生在任務的任何異常。這些限制可能會或可能不會成爲您的問題。請參閱標記的副本,以更全面地說明不清理任務的含義。 –

回答

相關問題