조건을 때 마지막으로 실행되지 않습니다.순도 있습니다.마지막으로 블록

StackOverflow https://stackoverflow.com/questions/111597

  •  02-07-2019
  •  | 
  •  

문제

기본적으로 들었는 특정 조건은 원인이됩니다.net 하거나 마지막으로 차단합니다.사람이 무엇을 알고 그 조건은?

도움이 되었습니까?

해결책

두 개의 가능성:

마지막으로 블록 실행되지 않을 것이 있을 때 StackOverflowException 터가 존재하지 않기 때문에 객실에 스택하더라도 실행이 더 코드입니다.그것은 또한되지 않을 때 호출가 ExecutionEngineException, 발생할 수있는 호출에서 Environment.FailFast().

다른 팁

지 않는 한 CLR 불면 다운로 ExecutingEngineException(봤어요 몇 가지에서.net1.1 일 다만 적당한 양의 COM:)..생각해야 마지막으로 실행됩니다.

당신이 얻을 수 있는 상황에서 코드를 시도록 원인 SecurityException 이 발생하기 전에 시도록 입력(대신 이 예외가 발생 할 때 포함하는 방법이라고(참조하십시오 http://msdn.microsoft.com/en-us/library/fk6t46tz(VS.71).aspx)),이 상황에서 당신은 심지어를 입력하려고 블록 코드에서 마지막으로 블록가 호출되지 않습니다.

기타의 가능성을 포함 StackOverflowException 및 ExecutingEngineException.

Finally 블록에 background thread 지 않을 수 있습니다 실행합니다.그러나,그에 따라 달라집의 실행을 완료 main foreground thread 는 종료 background thread 작업 전에 전체의 실행 background thread.

class Program
{

    static void Main(string[] args)
    {
        Program prgm = new Program();
        Thread backgroundThread = new Thread(prgm.CheckBgThread);
        backgroundThread.IsBackground = true;
        backgroundThread.Start();
        Console.WriteLine("Closing the program....");
    }

    void CheckBgThread()
    {
        try
        {
            Console.WriteLine("Doing some work...");
            Thread.Sleep(500);
        }
        finally
        {
            Console.WriteLine("This should be always executed");
        }
    }
}

도 있습니다.종료 방법입니다.

지 않는 코드는 다음에 마지막으로 블록으며,코드에 외부 범위를,실행하지 않고 마지막으로 차단되 처음 시작(예외에 마지막으로 차단할 수 있도록 발생할 수 있습 출구로 조기에,어떤 경우에는 실행할 것이 점프에서 종료자는 외부 범위).만약 코드를하기 전에 마지막으로 블록에는 무한 루프 또는 방법에는 종료하는 경우,또는 실행 컨텍스트가 전부 파괴,마지막으로 차단할 것이 실행되지 않습니다.

그것은 적절한 의존하는 마지막으로 블록과는 달리,"을 마무리 방법"(또는 C#"소멸자")해야하는지 제대로 의존 합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top