2013-02-01 3 views
5

「古いスタイル」の非同期メソッドはawaitable作るには?はどのように

[このメソッドは、Windows携帯電話7のためであるが、任意の同様のC#の構文にも等しく適用する必要があります]

DNSEndpoint Endpoint = ... 
NameResolutionCallback Callback = (nrr) => { ... } 
DeviceNetworkInformation.ResolveHostNameAsync(Enpoint, Callback, null); 

私はこの呼び出しの周りawaitableラッパーを置きたいので、私が完了するのコールバックを待ちます次のコマンドを続行する前に。

+2

または.NET 4.5あなたがTaskFactory.FromAsync(http://msdn.microsoft.com/en-us/library/dd321469を使用することができます。 aspx) - 私はWP7のための簡単な同等のことを知らない。同等のものを持っているサポートライブラリがあるかもしれません。 –

+2

私はFromAsyncがBeginXXX、EndXXXペアとして定義されたメソッドのためだと思ったのですか? – Peregrine

+0

さまざまなFromAsyncオーバーロードがあります。私は最も適切なものにリンクしていないかもしれません。 –

答えて

7

あなたはTaskCompletionSourceを使用することができます。汎用性のあるクラスライブラリで

var tcs = new TaskCompletionSource<TypeOfCallbackParameter>(); 

MyMethodAsync(..., r => tcs.SetResult(r)); 

return tcs.Task; 
+0

+1。 'TaskCompletionSource 'は[正しい方法](http://msdn.microsoft.com/en-us/library/hh873178.aspx)です。 –