2017-10-18 9 views
1

서비스 패브릭 클러스터에는 RunAsync 메서드에서 while 루프가 계속 실행되는 상태 저장 서비스가 있습니다. 이 while 루프 때문에 클러스터에서 응용 프로그램을 삭제하는 것이 어렵다는 것을 알고 있습니다. 오류는 프로세스를 분리 할 수 ​​없다는 것을 삭제하려고 할 때마다 발생합니다. 일반적으로 응용 프로그램을 배포하여 코드를 제거하려고합니다. 응용 프로그램 위에 코드를 다시 배포하려면 두 번 배포해야합니다. 무한 while 루프를 제거하지 않고이 문제를 해결할 수 있습니까?서비스 패브릭 클러스터에서 상태 비 저장 서비스를 삭제하는 중 오류가 발생했습니다.

업데이트 : Runasync 방법은

protected override async Task RunAsync(CancellationToken cancellationToken) 
    { 
     //making sure the thread is active 
     while (true) 
     { 
      do something; 
     } 

    } 

입력 주셔서 감사합니다.

+0

당신은 더 나은 이해를 위해 귀하의 RunAsync 방법을 추가 할 수 있습니까? –

+0

Runasync 메서드를 추가했습니다. – user3530857

답변

2

종료하는 동안 RunAsync에 전달 된 취소 토큰이 취소됩니다. 메인 루프에서 취소 토큰의 IsCancellationRequested 속성을 확인해야합니다. 이것이 사실이되고 호출 될 때 토큰의 ThrowIfCancellationRequested 메소드는 OperationCanceledException을 발생시킵니다.

서비스가 이러한 API 호출에 대해 적절한 시간 내에 응답하지 않으면 Service Fabric이 서비스를 강제 종료 할 수 있습니다. 대개 이것은 응용 프로그램을 업그레이드하거나 서비스를 삭제할 때만 발생합니다. 이 제한 시간은 기본적으로 15 분입니다.

는 좋은 참고이 문서를 참조하십시오 : https://docs.microsoft.com/en-us/azure/service-fabric/service-fabric-reliable-services-lifecycle#stateless-service-shutdown