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