![](/img/trans.png)
[英]How to use Reflection to call a method of type “private async Task”
[英]How to await an async private method invoked using reflection in WinRT?
我正在為WinRT應用程序編寫單元測試,並且我能夠使用以下方法調用非異步私有方法:
TheObjectClass theObject = new TheObjectClass();
Type objType = typeof(TheObjectClass);
objType.GetTypeInfo()
.GetDeclaredMethod("ThePrivateMethod")
.Invoke(theObject, null);
但是,如果有問題的私有方法是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>
更好。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.