웹 서비스를 클라이언트에 노출시키는 간단한 서버에서 작업하고 있습니다. 일부 요청은 완료하는 데 시간이 오래 걸리고 논리적으로 여러 단계로 나뉩니다. 이러한 요청의 경우 실행 중 진행 상황을보고해야합니다. 또한 이전 요청이 완료되기 전에 새 요청이 시작될 수 있으며 두 시스템이 동시에 실행해야합니다 (일부 시스템 관련 제한 사항 제외).다중 단계 작업의 진행 상태 추적
나는 서버가 TaskId를 클라이언트에 반환하고 클라이언트가 TaskId를 사용하여 요청 진행 상황을 추적하도록하는 방법을 고려하고있었습니다. 나는 이것이 좋은 접근 방법이라고 생각하며, 나는 어떻게 업무가 관리되는지에 관한 문제로 남겨져있다.
TPL을 절대로 사용하지 않은 것이이 문제에 접근하는 좋은 방법이라고 생각했습니다. 실제로 스레드를 수동으로 관리 할 필요없이 여러 작업을 동시에 실행할 수 있습니다. ContinueWith를 사용하여 비교적 쉽게 여러 단계 작업을 만들 수도 있습니다.
그러나 나는 작업 진행 상황을 추적하는 좋은 방법을 생각해 내지 못합니다. 내 요청이 단일 "단계"로 구성되어있는 경우 협력 단계에서 상태를보고해야한다는 것을 알고 있습니다. 이것은 내가 지금 피하려고하는 것이 좋습니다. 그러나 요청이 여러 단계로 구성되어있는 경우 어떤 단계가 현재 실행 중인지 알고 그에 따라 진행 상황을보고하고 싶습니다.
Task<int> firstTask = new Task(() => { DoFirstStep(); return 3.14; });
firstTask.
ContinueWith<int>(task => { UpdateProgress("50%"); return task.Result; }).
ContinueWith<string>(task => { DoSecondStep(task.Result); return "blah"; }.
ContinueWith<string>(task => { UpdateProgress("100%"); return task.Result; }).
그리고 대신의 UpdateProgress 일부 알려진 위치를 업데이트 할 필요없이, 자신의 진행 상황을 저장하는 작업을하고 싶은 이후에도이 완벽하지 : 내가 가지고 올 수있는 유일한 방법은 매우 귀찮은이다. 게다가 새로운 단계를 추가 할 때 많은 장소를 변경해야한다는 명백한 단점이 있습니다 (지금부터 진행률은 50 %, 100 % 대신 33 %, 66 %, 100 %입니다).
누구에게 좋은 해결책이 있습니까?
감사합니다.
자세한 답변을 보내 주셔서 감사합니다. 나는 TPL이 최선의 접근법이 아닐 수도 있다는 것에 동의한다. 나는 그것을 사용할 수있는 기회를 얻기를 바라고 있었지만 다른 날을 기다려야 할 수도 있습니다 ... –