我的Windows服务需要每分钟监视系统中的不同内容(连接到某些WCF服务,发送一些数据等)。
为此,我选择使用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()
等。这些方法使用大量日志记录自行跟踪其活动,因此我不需要跟踪Task
返回的monitor.Start()
。我需要解雇并忘记。
现在,我的问题是:我对task
方法返回的Launch
怎么办?我无法想到将它存放在任何地方的理由,因为它是一种即发即弃的操作。但另一方面,如果一个方法返回一个对象,那么忽略它就很奇怪了。 task
完成后,是否需要进行任何清理?如果我离开任务并且从不跟踪其状态,我是否会遇到任何性能问题?
答案 0 :(得分:0)
正如https://blogs.msdn.microsoft.com/pfxteam/2012/03/25/do-i-need-to-dispose-of-tasks/所述,简短的回答是“不。不要费心处理你的任务。”
此处也有好消息:Do I need to dispose of a Task?