2016-08-19 48 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'对象意味着你将无法监视任务的状态,包括您将无法观察到发生在任务的任何异常。这些限制可能会或可能不会成为您的问题。请参阅标记的副本,以更全面地说明不清理任务的含义。 –

回答