2014-04-03 3 views
0

저는 작업중인 프로그램에서 장치를 쿼리합니다. 간결하게하기 위해 응답이 200ms가 걸릴 수있는 느린 네트워크 요청이라고합시다. 백그라운드에서 5 가지 이상을 반복적으로 쿼리하고 UI에이 요청에서 얻은 응답을 업데이트하는 프로그램이 필요합니다. 경우에 따라 사용자가 다른 네트워크 요청을 초래하는 명령을 제공 할 수 있습니다. 이 작업을 완료 한 다음 이전에했던 5 가지 작업을 계속 수행해야합니다.백그라운드에서 일련의 메소드를 연속적으로 실행하는 방법

이것은 실제 네트워크 요청이 아니기 때문에 이러한 요청은 중복 될 수 없으므로 한 번에 하나씩 만 발생할 수 있으므로 한 번에 여러 스레드를 스핀 해제 할 수 없습니다.

내 현재의 아이디어가 될 큐의 일종 설정하는 것입니다 같은 의사를 구분 :

DoTaskA(); 
DoTaskB(); 
DoTaskC(); 
DoTaskD(); 
DoTaskE(); 
RequeueTasksABCDE(); 

그리고 DoTaskE() 이후에 어쩌면 일어날 수있는 사용자 명령 요청을 추가 할 수 있지만 RequeueTasksABCDE 전() .

지금까지 연구 한 결과 BlockingCollection을 큐로 사용하려고 생각했지만 이것이 좋은 방법입니까? 어떤 도움이라도 대단히 감사 할 것입니다.

+0

단일 뮤텍스로 "여러 개의 스레드 시작"을 원할 수 있습니다. 잠금 키워드를 확인하십시오. –

답변

0

새 작업자 스레드를 만들고 작업자 스레드에서 함수를 실행하면이 작업을 수행 할 수 있습니다.

+0

현재이 작업을하고 있으며 현재 사용자 comands를 다루는 현재의 방법은 backroundworker를 일시 중지하고 사용자 명령을 실행 한 다음 다시 시작하는 것입니다. 그러나 테스트에서 신뢰할 수 없다는 것이 입증되었고 작업 큐가 더 좋은 아이디어라고 생각합니다. 큐에 대한 현재 아이디어 레이아웃이 좋은 연습인지 잘 모르겠습니다. – Xantham

+0

하나의 옵션은 UI 스레드에 필요한대로 UI 스레드로 다시 정렬하여 작업자 스레드에서도 사용자 명령을 수행하는 것일 수 있습니다. 'foreach (tasks) {task(); userstuff(); }'- userstuff()에서 호출하는 것들과 함께, 자연의 것. –

관련 문제