簡體   English   中英

System.Threading.Tasks - > Continuations

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM