我已经阅读了这个问题,但在我的情况下它更简单,因为我不必使用Result
属性。所以我想知道我是否可以采用比斯蒂芬·克利里的回答提供的更简单的方法。
假设我有这个简单的界面。
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);
这里有什么我应该担心使用这种方法的吗?例如异常处理等?