2014-02-21 3 views
1

여기 내 시나리오가 있습니다.mvc 컨트롤러에서 비동기 작업을 트리거

장기간 (아마도 20-30 분) 실행될 수있는 서비스를 시작할 웹 엔드 포인트를 만들고 싶습니다. 나는 즉시 HttpResponseResult를 반환하고 서비스가 클라이언트에 응답을 반환하기 전에 완료 될 때까지 기다릴 필요없이 비동기 적으로 실행되도록 트리거하려고합니다.

이렇게하는 가장 쉬운 방법은 무엇입니까? 서비스에서 어떤 종류의 결과도 반환 할 필요가 없습니다. 그냥 실행하십시오.

+0

IIS 주소 공간에서 좀비 스레드를 실행하지 마십시오. http://stackoverflow.com/a/21873422/1768303 – Noseratio

답변

1

Task.Run(() => <trigger service call>)을 사용하여 작업을 실행하고 반환 값을 무시하십시오. 유일한 단점은 스레드 풀에서 스레드를 소비한다는 것입니다. 서비스에 비동기 버전의 작업이있는 경우 TaskCompletionSource

+0

와우. 너무 간단합니다. 감사. –

0

SignalR이 종류의 동작을 수행합니다. 자습서는 here입니다.

기본적으로 클라이언트는 서버 메소드/작업을 호출하고 '완료'됩니다 (클라이언트 측에서 원하는대로 계속 수행 할 수 있습니다). 서버가 완료되면 RPC를 통해 클라이언트에 데이터/알림을 보냅니다.

서버 측에서는 동기식 또는 비동기식과 같이 원하는대로 코드를 실행할 수 있습니다.

+0

그렇지 않습니까? 내가 호출 할 수있는 비동기 메소드를 작성하여보다 쉬운 방법이 될 수 있습니다. 혼란스러워하는 부분은 aysnc 프로세스의 결과에 전혀 관심이 없을 때 비동기 메서드를 구현하는 방법입니다. –

관련 문제