假设你有这项服务:
interface ISuessService {
Task<Thing> Thing1();
Task<Thing> Thing2();
}
我有一个扩展方法ContinueOnUIThread
,我可以在这里做很酷的事情:
myService.Thing1().ContinueOnUIThread(_ => label.Text = "Done!");
并轻松与UI线程进行交互。
实现执行此操作的新ContinueWith
扩展方法的最佳方法是什么:
myService.Thing1()
.ContinueWith(myService.Thing2())
.ContinueOnUIThread(_ => label.Text = "Done!");
基本上在Thing2
完成后启动Thing1
,然后调用UI线程。
我最接近的是这样的,但我真的不喜欢打电话给Wait
:
myService.Thing1()
.ContinueWith(_ => {
var thing2 = myService.Thing2().Wait();
return thing2.Result;
})
.ContinueOnUIThread(_ => label.Text = "Done!");
有干净的方法吗?
PS - 我没有.Net 4.5所以没有await / async允许 - 这段代码必须在MonoTouch / Mono for Android上运行所以坚持4.0
PS - 请注意我对_
的使用,这只是“我没有真正使用此参数”的快捷方式“
答案 0 :(得分:3)
我认为您可能正在寻找的是来自Unwrap
的System.Threading.Tasks.TaskExtensions方法myService.Thing1()
.ContinueWith(_ => myService.Thing2()).Unwrap()
.ContinueOnUIThread(_ => label.Text = "Done!");