Do I need do clean up after launching TPL tasks <p>I have Windows service that needs to monitor different things in the system (connect to some WCF services, send some data, etc.) every minute.</p> <p>For that I chose to use Quartz.NET jobs which look as follows:</p> <pre><code>internal class MonitorLaunchJob : IJob { public void Execute(IJobExecutionContext context) { MonitorBase[] monitors = GetAllMonitors(); foreach (var monitor in monitors) var task = monitor.Launch(); } } </code></pre> <p><code>monitor.Launch</code> is the method with the following signature:</p> <pre><code>public abstract Task Launch() </code></pre> <p>The overrides of this method may use long-running operations like <code>await TcpClient.ConnectAsync()</code> and stuff like that. Those methods track their activity by themselves using a lot of logging, so I don't need to keep track of the <code>Task</code> returned by <code>monitor.Start()</code>. I need to just fire and forget.</p> <p>Now, my question is: what do I do with this <code>task</code> that <code>Launch</code> method returns? I can't think of a reason to store it anywhere since it's a fire-and-forget operation. But on the other hand, if a method returns an object, it is weird to just ignore it. Do I need to do any sort of clean-up when the <code>task</code> is completed? Will I face any performance issues if I just leave the task be and never track its state?</p>