私はWindows 8 Runtime Componentを開発しているので、パブリックインターフェイスにはWindowsランタイムタイプではないTask<T>
が含まれていないようにすることができます。待ち受けができないときの待ち合わせ方法
これは、メソッドをasync
とマークすることはできず、await
のprivate async
メソッドをマイライブラリに含めることができないことを意味します。これは、私のアプリケーションロジックをどう扱うかについていくつかの混乱を招いています。
これは私が同期的にしたいことです。
Result r = TryGetAuthResultFromFile();
if(r != null)
{
return r;
}
r = GetAuthResultFromWebAuthenticationBroker();
return r;
問題はTryGetResultFromファイルは、私はこれを試してみたasync Task<Result>
方法とrを返すのメソッドがIAsyncOperation<Result>
を返している(これは完全なコードではなく、理論が見られることができ、ハンドルがあるということです継続をもたらし、それらを返すと、IAsyncOperation型に結果の詰め込みをする必要があります)。
TryGetAuthResultFromFile().ContinueWith(x=>
{
if(x.Result != null)
{
return x.result;
}
GetAuthResultFromWebAuthenticationBroker().ContinueWith(y=>
{
return y.Result;
});
});
これに伴う問題は、それがUIスレッドから呼び出されていない場合WebAuthenticationBroker
が作業を思われないということです。有用なエラーメッセージなしで有用なNotImplementedException
をスローします。
TryGetAuthResultFromFile
に電話をかけてから、結果を待つには、GetAuthResultFromWebAuthenticationBroker
に電話してください。
ありがとうございます、私はすでにこの技術をどこか別の場所で使用していました。なぜ私は明白な解決策を見つけられなかったのか分かりません。 – BenCr