IT Share you

WinRT에서 리플렉션을 사용하여 호출 된 비동기 개인 메서드를 기다리는 방법은 무엇입니까?

shareyou 2020. 12. 11. 20:54
반응형

WinRT에서 리플렉션을 사용하여 호출 된 비동기 개인 메서드를 기다리는 방법은 무엇입니까?


WinRT 앱에 대한 단위 테스트를 작성 중이며 다음을 사용하여 비 비동기 개인 메서드를 호출 할 수 있습니다.

TheObjectClass theObject = new TheObjectClass();
Type objType = typeof(TheObjectClass);
objType.GetTypeInfo()
       .GetDeclaredMethod("ThePrivateMethod")
       .Invoke(theObject, null);

그러나 문제의 private 메서드가 async인 경우 코드는 완료 될 때까지 기다리지 않고 계속 실행됩니다.

여기에 await기능을 어떻게 추가 합니까?


메서드가 반환 한 값을 사용해야합니다. 유형을 알고 있습니까? 예를 들어 항상 Task이면 다음을 사용할 수 있습니다.

await (Task) objType.GetTypeInfo()
                    .GetDeclaredMethod("ThePrivateMethod")
                    .Invoke(theObject, null);

반환 유형을 모르지만 기다릴 수 있다는 것을 알고 있다면 동적 유형을 사용할 수 있습니다.

await (dynamic) objType.GetTypeInfo()
                       .GetDeclaredMethod("ThePrivateMethod")
                       .Invoke(theObject, null);

내가 할 시도 하지만 처음에 단위 테스트에 반사에 의한 개인 메소드를 호출하는 것을 방지 할 수 있습니다. 공개 (또는 내부) API를 통해 간접적으로 테스트 할 수 있습니까? 일반적으로 바람직합니다.


Invoke로 변환 할 수있는 객체를 반환해야합니다 Task. 그냥 await.

개인 메서드가을 반환 void하면 사용자 지정이 필요합니다 SynchronizationContext. 메서드가 Task/를 반환하도록하는 것이 좋습니다 Task<T>.

참고 URL : https://stackoverflow.com/questions/14711585/how-to-await-an-async-private-method-invoked-using-reflection-in-winrt

반응형