我讀過this question但在我的情況下它更簡單,因爲我不必使用Result
屬性。所以我想知道是否可以採用比斯蒂芬·克利裏的答案更簡單的方法。將任務轉換爲任務<T>(包裝任務返回類型T)
假設我有這個簡單的接口。
internal interface IBinaryDataReadable
{
Task Load(AsyncDataReader reader);
}
該接口提供方法異步加載對象。它不會返回任何東西,因爲加載結果是對象本身。
(該接口是內部和爲此實現明確地避免暴露實現)
這是我如何加載的二進制數據。
data = new BinaryData();
await ((IBinaryDataReadable)data).Load(reader);
我想使這個更流暢和詳細,所以我寫這擴展方法
internal static Task<TData> Load<TData>(this TData data, AsyncDataReader reader)
where TData : IBinaryDataReadable
=> data.Load(reader).ContinueWith(t => data, TaskContinuationOptions.ExecuteSynchronously);
現在正在加載變成這樣。
data = await new BinaryData().Load(reader);
這裏有什麼我應該擔心使用這種方法?例如異常處理等?
謝謝。我避免使用async/await的原因是爲了防止爲非常基本的任務生成狀態機開銷,但這是一個很好的解決方案,我想知道是否使用ContinueWith引入了問題。 –
@ M.kazemAkhgary,不,我沒有看到它引入了任何問題,除了無法控制異常 – Nkosi