나는 현재 그물에서 발견 된 새로운 System.Threading.Tasks 기능을 사용하여 새 구현 일부 홈 구운 작업 기능을 대체하고 4System.Threading.Tasks.Task이 완료 통지를 얻는 방법
나는 약간의 문제가 있지만, 몇 가지 해결책을 생각할 수는 있지만 일반적으로 최선의 방법을 제안하고, 어딘가에 속임수가 없다면 조언을 듣고 싶습니다.
내가 원하는 것은 임의의 프로세스가 작업을 시작할 수 있지만 계속 수행하고 작업이 끝날 때까지 기다리지 않는 것입니다. 문제는 아니지만 작업 결과로 무언가를해야 할 때 가장 좋은 방법이라고 확신하지는 않습니다.
필자가 보았던 모든 예제는 작업이 완료 될 때까지 또는 작업의 결과 매개 변수를 참조 할 때까지 Wait()를 사용합니다. 이 두 가지 모두 내가 원하지 않는 작업을 시작한 스레드를 차단합니다.
내가 생각 한 일부 솔루션 : 새로운 스레드를 생성하고 그에 작업을 시작, 새로운 스레드를 차단하는 대기() 또는 .Result를 사용하고 호출자에게 결과를 동기화
은 어쨌든, 아마도 IsCompleted 작업에 폴링을 할 수 있습니다.
실행하고 싶은 작업이 완료된 후에 시작할 수있는 '완료 완료'작업이 있습니다. 그러면 실행하려고하는 작업이 정적 이벤트 나 다른 것을 발생시킵니다.
대리인을 작업 입력에 전달하고 해당 작업을 호출하여 작업이 완료되었음을 알립니다.
내가 생각하는 나 장점과 단점 모두에게 있지만 특히에 작업을 시작하기 위해 명시 적으로 새로운 스레드를 만들 필요의 아이디어를 좋아하지 않아 수있을 때를 사용하는 목적의 하나 첫 번째 작업 클래스는 직접 스레드 사용을 추상화하는 것입니다.
가장 좋은 방법에 대한 의견이 있으십니까? 나는 간단한 것을 놓치고 있습니까? 'Completed'이벤트가 너무 많아서 물어볼 수 없습니까? :) (일이없는 이유를 확실히 좋은 이유가있다!)
호기심에서 벗어나서 BackgroundWorker를 사용하지 않으시겠습니까? 작업 완료 및 취소 알림이 있습니다. – Robaticus
'Task'가 우리와 함께있을 때'BackgroundWorker'는 더 이상 필요하지 않습니다. BGW는'SynchronizationContext'를 필요로했습니다. 이것은'Task' (선택 사항) (더 큰 병렬 처리를 가능하게합니다)입니다. –