データソースから情報を読み取り、この情報を単純なコントローラの.NET 4.5 Web APIサイトであるWebサイトにプッシュする小さな.NET 4.5 C#アプリケーションがあります。コントローラはデータを受信し、それをデータベースに格納します。.NET HTTPClient非同期の制限
私のために、次の作品、早くそれを書くことができます読み取ることができ、アプリケーションとすべてがDBで終わるよう:
public static void PostDataToWebApi(MyDataClass tData)
{
HttpResponseMessage s = null;
try
{
s = client.PostAsJsonAsync("/api/Station/Collector", tData).Result;
s.EnsureSuccessStatusCode();
}
catch (Exception e)
{
Console.WriteLine("ERROR (ClientPost): " + e.ToString());
}
}
動作しません、次の。それは千余りのレコードに関する投稿や、すべての「タスクがキャンセルされた」というメッセージとエラーの数を思い付くが、その後、約10秒後には、処理を再開:
public static async void PostDataToWebApi(MyDataClass tData)
{
HttpResponseMessage s = null;
try
{
s = await client.PostAsJsonAsync("/api/Station/Collector", tData);
s.EnsureSuccessStatusCode();
}
catch (Exception e)
{
Console.WriteLine("ERROR (ClientPost): " + e.ToString());
}
}
完全なエラーは以下のとおりです。
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()
at IICE_DataCollector_Remote.Program.<PostDataToWebApi>d__7.MoveNext() in e:\Users\TestUser.TEST\Documents\Visual Studio 2012\Projects\Test_App-trunk\TestCollector\Program.cs:line 475
これはすばやく修正されますか?私はそれが何かを使い果たし伝えることができるものから、スレッド、:-)
任意のポインタを知っているソケットは、いただければ幸いあなたは同期POSTを行うことはかなり遅いです想像できるように、私は、この作業を取得してみたいです非同期よりも。
私のマシン、ローカルアンチウィルスまたはネットワークではないことを確かめるために、私はW2k8 R2サーバー、Windows 7仮想ゲストデスクトップ(フレッシュビルド)、Windows 8マシンで試しました。同じ結果。
詳細情報:私はこれを、小さなデータセット(10,000レコード)と100のDefaultConnectionLimitでLAN接続から部分的に成功させてテストしました。しかし、50万レコードの生産では、リモートサーバー私は何も成功していません(まだ25ms-50msの低レイテンシです)。
この例外のメッセージを教えてください。 –
2番目のバージョンで 'await'が欠けていませんか?それはコンパイルしてはならないようです... –
@JonSkeetあなたは正しいです、私の代わりにコピー&ペーストエラー!これを修正しました。 – Dominik