Profile158 (Windows ストア、.NET 4.5、Silverlight 5、Windows Phone 8) をターゲットとするポータブル クラス ライブラリ (PCL) があります。Task 型を返すメソッドを簡単に操作でき、すべて期待どおりに機能します。Result プロパティにアクセスすると、非同期コードの実行が終了し、結果が返されます。
ただし、PCL 内のメソッドで async/await キーワードを使用すると、タスクが返されます。ただし、Result プロパティにアクセスしようとすると、ブロックされて戻りません。
どちらの場合も、Visual Studio のデバッグ出力ウィンドウを見ると、同じテキストが表示されます。
Thread started:
Thread started:
Loaded assembly: Mono.Security.dll [External]
Thread started:
Thread started:
そのため、コードが実行されているように見えますが、UI スレッドに戻ることはありません。PCL で Microsoft.bcl.async を使用して PCL を使用しようとした人はいますか?
私の Mono Droid プロジェクトは、Android 2.1 を対象としています。
ありがとう、 -- ジョン
更新:
さまざまなシナリオに関する追加情報を次に示します。まず、UI コードで記述した場合に Mono Droid で動作するコードを次に示します。
var task = request.GetResponseAsync();
string html = task.Result.GetResponseText();
次に、PCL で次のメソッドを作成しました。
public async Task<string> Test()
{
IHttpResponse responce = await GetResponseAsync();
return responce.GetResponseText();
}
そして、Mono UI コードから次のコードで呼び出します。
string html = request.Test().Result;
それは二度と戻らない…