동적으로 실행되는 기본 구성 요소가 프로세스 손상 상태 예외를 던져서 로깅 할 수 있고 구성 요소를 다시로드하기 좋지 않은 것으로 표시 할 때를 알 필요가 있습니다 내 과정을 망칠거야.Async.Catch를 사용하여 처리 상태가 손상된 처리 예외 처리
이 구성 요소의 실행은 비동기 적으로 수행되며 Async.Catch를 사용하여 해당 예외를 처리합니다. Async.Catch의 동작을 테스트하기 위해 다음 코드를 시도했는데 Async.Catch가 매달린 것 같습니다. 이것은 나에게 바람직하지 않은 영향이며 모든 PCSE가 동일한 동작을 초래할 것이라고 의심하고 있습니다.
누구나이 상황에서 벗어날 방법을 알고 계십니까?
let a = async {
System.Threading.Thread.CurrentThread.Abort()
}
let b = async {
let! m = Async.Catch a
return match m with
| Choice1Of2 p -> "hello"
| Choice2Of2 e -> "Caught: " + e.ToString()
}
Async.RunSynchronously b;;
EDIT 1 : 나는 나를 중 하나 HandleProcessCorruptedStateExceptionsAttribute
함께 SecurityCriticalAttribute
로 사용하거나 config 항목 legacyCorruptedStateExceptionsPolicy=true
를 사용 가리키는 문서를 발견했다. 가능하다면 config 항목을 사용하고 싶지 않습니다.
편집 2 :
let b = async {
try
let! m = Async.Catch a
return "hello"
with
| :? System.Threading.ThreadAbortException as e -> return "Caught: " + e.ToString()
}
프로그램은 여전히 반환 또는 던지는없이 응답 : 주석의 제안을 바탕으로, 나는 다음과 같이 'B'에 대한 바인딩하자를 수정했습니다.
하지 대답을,하지만 난 당신이 만드는/with' 대신 Async.Catch''의 시도'사용할 수 있다고 생각하여 비동기 블록이 더 읽기 쉽습니다. – kvb
코드가 수정되었습니다 (EDIT2 참조). 여전히 동일한 동작입니다. –
문제를 해결할 것이라고는 기대하지 않지만, '할 수 있도록하자!' m ='Async.Catch'를'try' 블록으로 옮기지 않고 "hello"를 리턴합니다. – kvb