2009-12-01 2 views
0

데이터를 원시 테이블로 스크랩하는 클라이언트 응용 프로그램이 있습니다. 이 클라이언트 응용 프로그램은 실제 데이터를 테이블로 구문 분석하는 저장 프로 시저에 대한 비동기 호출을 만듭니다. 이 처리는 저장 프로시 듀어에 의해 처리됩니다. 저장 프로 시저를 실행하는 데 최대 30 분이 소요될 수 있습니다. 저장된 proc을 호출하는 클라이언트 응용 프로그램이 종료되고 실행이 완전히 중지되기를 원합니다. 저장 프로 시저를 호출하는 클라이언트 응용 프로그램을 종료하자마자 저장 프로 시저가 실행을 종료합니다.완료를 기다리지 않고 비동기 Storec Proc

이것을 달성하는 가장 좋은 방법은 무엇입니까? 나는 서버에서 일을하고 싶지 않다. 클라이언트 응용 프로그램에서이 처리를 트리거해야합니다. 데이터베이스 트리거 (내 첫 번째 아이디어)는 트리거가 호출하는 저장 프로 시저가 완료 될 때까지 삽입 완료를 고려하지 않기 때문에 문제를 해결하지 못했습니다.

다음은 비동기 메소드입니다. 나는 LINQ를 사용하고있다. 어떻게 든 수정할 수 있습니까? 아니면 새로운 디자인이 필요합니까?

partial class MetaDataContext 
{ 

    delegate int Process_CompleteCycle2Delegate(int? frequencyID, int? cycleID); 

    public void Process_CompleteCycle2Async(int? frequencyID, int? cycleID) 
    { 
     Process_CompleteCycle2Delegate completeCycleDelegate = new Process_CompleteCycle2Delegate(this.Process_CompleteCycle2); 
     IAsyncResult async = completeCycleDelegate.BeginInvoke(frequencyID, cycleID, null, null); 

} 

답변

4

Asynchronous procedure execution을 참조하십시오. 신뢰할 수있는 트랜잭션 방식으로 협조하십시오.

+0

완벽 ... 고마워 Remus – ctrlShiftBryan

+0

거기에 이유가 무엇입니까? 나는 당신의 방법으로 내 저장된 proc을 호출 할 때 나는 서로를 차단하는 많은 SPID를 얻는가? SSMS 나 응용 프로그램을 통해 proc을 실행할 때 이런 일은 발생하지 않습니다. – ctrlShiftBryan

+0

특히. 여분의 대화/큐 인프라 스트럭처는 잠금을 더 추가하지만 충돌하지 않아야합니다 (차단 없음). 실행 배경은 또한 일부 잠금을 추가하지만 다시 충돌하지 않아야합니다. 경합이 무엇인지 보려면 sys.dm_exec_requests를 사용할 수 있습니까? 어떤 문이 서로를 차단하고 있는지, 어떤 리소스에서). 이 사이트를 오프라인으로 만드는 것이 좋으면 내 사이트의 문의 양식을 사용하여 자세한 내용을 보내주십시오. 나는 오늘 그들을 나중에 보게 될 것이다. –

관련 문제