내가하고있는 작업 프로젝트를위한 작업 병렬 라이브러리의 사용법을 연구 중이며 장기 실행 작업의 장점 / 단점을 이해하고자합니다. 나는 실생활에 대한 예를 아직 가지고 있지 않다. 단지 이것에 대한 이론을 이해하고 싶다.
MSDN 페이지에서작업 스케줄러이그래서 질문ThreadPool 외부에서 스레드를 만들지 않도록되도록 오래 실행되는 작업을 최대한 피하는 것이 가장 좋습니다. 그러나 다음과 같이 완료하는 데 오랜 시간이 걸리는 작업을 수행했다고 가정 해보십시오.
Task.Factory.StartNew(() => DoTimeConsumingWork(), TaskCreationOptions.LongRunning)
작고 빠른 작업 단위로 작업을 분할하고 다음과 같이 작업 계속을 사용할 수 있습니까?
Task.Factory
.StartNew(() => DoWorkPart1())
.ContinueWith(t => DoWorkPart2())
.ContinueWith(t => DoWorkPart3())
//...etc
이 접근법이 더 유익 할 것인가 아니면 달성하려고 시도하는 것이 과잉인가?
최대한 오래 실행되는 작업을 피하는 것이 가장 좋습니다.
완전히 정확하지 않습니다. 필요하다면 어떻게 든 스레드를 만들거나 할당해야하고 LongRunning 옵션이있는 태스크가 아마도 최선의 선택 일 것입니다. 플래그는 단순히 스케줄러에게 태스크가 예상 할 수 있도록 잠시 걸릴 수 있음을 알려줍니다. 이 옵션을 무시할 수도 있습니다.
작고 빠른 작업 단위로 작업을 분할 해보십시오.
할 수 있다면 해보십시오. 그러나 타크스는 그렇게 쉽게 분리되어 있지 않습니다.
지정한 경우TaskCreationOptions.LongRunning
대부분 스레드 풀 외부에서 전용 스레드를 할당합니다.
나는 단순히 장기 실행 작업이 스레드 풀에서 스레드 대신 별도의 전용 스레드에서 실행되도록하는 BackgroundWorker 클래스를 제안합니다.