启动TPL任务后是否需要进行清理

时间:2016-08-19 14:54:45

标签: c# task-parallel-library

我的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完成后,是否需要进行任何清理?如果我离开任务并且从不跟踪其状态,我是否会遇到任何性能问题?

1 个答案:

答案 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?