非同期プログラミング モデル(APM) を多用する .Net ライブラリをWindows ストア アプリ ライブラリに移植しています。
ライブラリを使用する他のコードが Windows ストア アプリのバージョンで機能するように、メソッドの定義を同じに保ちたいと思います。(つまり、私が好む限り、非同期待機パターンはありません)。
問題は、Windows ストア アプリは APM と互換性があるように見えますが、具体的なAsyncResultクラスが欠落していることです。その結果BeginInvoke()
、コールバックと call で呼び出されたデリゲート インスタンスを取得できませんEndInvoke()
。
public MyObject EndDoSomething (IAsyncResult result)
{
// Retrieve the delegate.
AsyncResult asyncResult = (AsyncResult)result; // Not possible in Windows store app - no AsyncResult
// Wait for the WaitHandle to become signaled.
result.AsyncWaitHandle.WaitOne();
// Call EndInvoke to retrieve the results.
MyObject rv = ((MyAsynchronousDelegate)asyncResult.AsyncDelegate).EndInvoke(result);
// Close the wait handel
result.AsyncWaitHandle.Close() // Close() is also missing
return rv;
}
では、何をすべきか?