私はHTTPリクエストを行うクロスプラットフォームライブラリで作業しています。 Androidではうまくいきますが、iOSで使用しようとすると例外が発生するため、修正方法を理解できません。C# - Xamarin - HttpClient - オブジェクトの現在の状態のため、操作が無効です - iOS
ここが私のコードです:task.Wait();
に
// method from cross platform library
Task.Factory.StartNew(delegate
{
try
{
var client = new HttpClient();
// some other setup stuff
HttpRequestMessage request = new HttpRequestMessage(HttpMethod.post, "http://myurl.com...");
var task = client.SendAsync(request);
task.Wait(); // Exception thrown on this line
var response = task.Result;
var responseString = response.Content.ReadAsStringAsync().Result;
}
catch (Exception e)
{
}
}
私はいくつかの解決策を見つけようとOperation is invalid due to the current state of the object.
を言うSystem.InvalidOperationException
の内部例外でSystem.AggregateException
を取得し、私は問題がによって原因であることがわかっUIスレッドでこれを呼び出します。しかし、これはすべてをTask.Factory.StartNew
にラップする全体のポイントです。
私が知っているすべてを試してみましたが、まだ問題を解決していません。どんな助けでも大歓迎です。
編集:
私は、iPhoneシミュレータ上で私の解決策を試してみることにしました。 iOS 10を実行しているiPhone 6シミュレータです。私の物理的なデバイスは同じです。それは何かの理由で物理デバイスではなく、シミュレータ上で動作します...非常に奇妙です。
編集2:解決策を見つけるための@YuriSに
感謝。
何ができるかは、次のとおりです。 1)IOSプロジェクト 2の参考文献に行く)編集 3を参照します)アンドロイドのための 'System.Net.Http'
行動が確認同じ。
実際に別のスレッドプールスレッドで実行される新しいタスクの開始を保証することはできません。なぜあなたはこのようにしていますか? – Cheesebaron
@Cheesebaronどうすればこれが別のスレッドプールスレッドにあることを保証できますか? –
@ JaredPriceなぜこのようにやっているのか混乱しましたが、 "クロスプラットフォームライブラリ"で使用しているAndroidとiOSの両方のプロジェクトに同じNugetパッケージがインストールされていますか? – SushiHangover