[英]System.Threading.Tasks -> Continuations
假設你有這項服務:
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!");
在Thing1
完成后,基本上啟動Thing2
,然后調用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 - 注意我使用_
,這只是“我不是真的使用這個參數”的快捷方式
我認為您可能正在尋找的是System.Threading.Tasks.TaskExtensions中的Unwrap方法
myService.Thing1()
.ContinueWith(_ => myService.Thing2()).Unwrap()
.ContinueOnUIThread(_ => label.Text = "Done!");
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.