이 질문에는 이미 답변이 있습니다.
나는 매분마다 시스템에서 다른 것들을 모니터링 (일부 WCF 서비스에 연결, 일부 데이터 보내기 등)해야하는 Windows 서비스를 가지고있다.
이를 위해 나는 다음과 같은 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()
이 메소드의 재정의 (override)에서는, 다음과 같이 장기 실행 오퍼레이션을 사용할 수 있습니다.await TcpClient.ConnectAsync()
그런 것들. 이러한 방법은 많은 로깅을 사용하여 활동을 추적하므로, 해당 활동을 추적 할 필요가 없습니다.Task
에 의해 반환 된monitor.Start()
. 나는 단지 불을 피고 잊을 필요가있다.
자, 내 질문은 : 이걸로 내가 뭘 할 수 있니?task
그Launch
메서드가 반환됩니까? 화재 및 잊어 버리기 때문에 어디서나 저장할 수 있습니다. 그러나 다른 한편으로는, 방법이 목표를 돌려 보내는 경우에, 그것을 무시하는 것은 이상하다. 나는 어떤 종류의 청소를해야합니까?task
완성 됐습니다? 작업을 그대로두고 상태를 추적하지 않으면 성능 문제가 발생합니까?
여기에 말한대로https://blogs.msdn.microsoft.com/pfxteam/2012/03/25/do-i-need-to-dispose-of-tasks/짧은 대답은 "아니오, 당신의 업무 처리를 방해하지 않습니다."입니다.
여기에 좋은 정보 :작업을 처리해야합니까?
Task
개체는 작업에서 발생하는 예외를 관찰 할 수 없다는 것을 포함하여 작업 상태를 모니터링 할 수 없음을 의미합니다. 이러한 제한은 귀하에게 문제 일 수 있거나 아닐 수도 있습니다. 작업 정리의 의미에 대한보다 포괄적 인 설명은 표시된 중복을 참조하십시오. - Peter Duniho