4

あなたがサービスを持っているとしましょう:

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-私は.Net4.5を持っていないので、待機/非同期は許可されていません-このコードはAndroid用のMonoTouch / Monoで実行する必要があるため、4.0に固執します

PS-私の使用に注意してください_。これは「私は実際にはこのパラメータを使用していません」のショートカットにすぎません。

4

1 に答える 1

3

あなたが探しているのは、 System.Threading.Tasks.TaskExtensionsのUnwrapメソッドだと思います。

myService.Thing1()
.ContinueWith(_ => myService.Thing2()).Unwrap()
.ContinueOnUIThread(_ => label.Text = "Done!");
于 2012-10-16T22:06:36.777 に答える