내가 그러나 나는 다음과 같은 샘플을 이해하는 몇 가지 문제가 발생, 제약 실행 영역을 이해하기위한 시도 Constrained Execution Regions and other errata [Brian Grunkemeyer]을 통해 읽고 있어요에 탄소 배출권의 목적을 이해 :이 예
RuntimeHelpers.PrepareConstrainedRegions();
try {
// Prepare my backout code
MethodInfo m = _list.GetType().GetMethod("RemoveAt", new Type[] { typeof(int) });
RuntimeHelpers.PrepareMethod(m.MethodHandle);
IEnumerator en = c.GetEnumerator();
while(en.MoveNext()) {
_list.Insert(index++, en.Current);
// Assuming that these lines aren't reordered.
numAdded++;
}
_version++;
}
catch(Exception) {
// Reliable backout code
while(numAdded > 0) {
_list.RemoveAt(index--);
numAdded--;
}
throw;
}
나의 이해는 것입니다을 try
블록이 이 아니고이 제한되면 finally 및 catch 블록만이 제한됩니다. 즉, try
블록 중에 언제든지 비동기 예외 (예 : ThreadAbortException)가 throw 될 수 있습니다. 특히 numAdded++
앞에 있지만 _list.Insert
이후에 throw 될 수 있습니다. 이 경우 백 아웃 코드는 _list
에서 너무 적은 항목 하나를 제거합니다.
이 예제에서 나는이 예제에서 제한된 실행 영역의 목적을 이해하는 데 어려움을 겪고 있습니다.
이 부분에 대한 올바른 이해가 있습니까? 아니면 놓친 부분이 있습니까?
여기에는 문제가있는 것처럼 보입니다. –