【发布时间】:2016-08-31 01:13:16
【问题描述】:
我希望能够做到这一点:
class MyClass
{
IRepo repo;
public MyClass(IMyRepo repo) { this.repo = repo; }
long ID { get; set; }
string Prop1 { get; set; }
string Prop2 { get; set; }
public async Task LoadAsync()
{
await Task.WhenAll(
repo.GetProp1ByIDAsync(ID).OnComplete(x => Prop1 = x),
repo.GetProp2ByIDAsync(ID).OnComplete(x => Prop2 = x)
);
}
}
当然,我似乎找不到任何标准库具有 Task 的 OnComplete 扩展名。我真的需要创建自己的,还是有一个库已经有这个扩展方法?我看到有ContinueWith,但这并没有给我解开的结果,我仍然需要await 它或.Result 它......所以这不会阻塞线程吗?等待第二个repo 呼叫直到完成?如果它不支持它,那么为什么我仍然得到这个结果,将解开的结果返回给我会更干净吗?还是我错过了什么?
【问题讨论】:
-
旁注:混合
async和回调可能会让读者感到困惑......我不会寻找库来实现一个语句功能,如:public static async Task OnComplete<T>(this Task<T> t, Action<T> callback){callback(await t);}
标签: c# callback async-await task