進行中で、私はそうHttpPost
方法が背景 とcalling method
で実行する必要が供給URL
からウェブResponse
メッセージを待ちたくない場合はここで私はそのタスクを実行する必要があり、それが移行される場合propertieのチェックまたは進行中です同時に。 この機能を実現するために、以下の方法でasync
とawait
を使用しました。以下は C#でasyncとawaitを使用するには?
XML
応答を得るための方法である:
public static async Task<string> HttpPost(string url, string message, bool ignoreResponse = false)
{
string lcPostData = null;
string _XmlResponse = string.Empty;
try
{
using (var client = new HttpClient())
{
var httpContent = new StringContent(message, Encoding.UTF8, "application/xml");
var SupplierLinkUri = new Uri(url);
if (!ignoreResponse)
{
var httpResponseMessage = await client.PostAsync(SupplierLinkUri, httpContent);
if (httpResponseMessage.StatusCode == HttpStatusCode.OK)
_XmlResponse = httpResponseMessage.Content.ReadAsStringAsync().Result;
}
else if (ignoreResponse && !(isReservation(message))) //message.Contains("Reservation"))
{
/* I want below lines of code to run asynchronously (i.e. Run in background) So I used Task & await but it fails*/
Task<HttpResponseMessage> httpPostTask = client.PostAsync(SupplierLinkUri, httpContent);
HttpResponseMessage asyncPost = await httpPostTask;
}
}
}
catch (Exception e)
{
}
return _XmlResponse;
}
は、上記の方法はエラーなしで実行されているが、私は、これはC#でasync
とawait
を使用するための適切なアプローチであるかどうかを知りたいです、 コードを修正する必要がありますか?
await
else-if
部分が機能していません。ドキュメントごとに、これはasynchronously
をバックグラウンドで実行する必要がありますが、現在はバックグラウンドではありません。
誰でもコード内の何が間違っているか確認してください。
これを達成するためのより良い方法はありますか?
おすすめのアイデアがあります。助けてくれてありがとう!
:前の記事で非同期のボイド」を避けますサーバーコードが変更されていない限り、データを連続データとして取得することはできません。ブロック内のデータを取得する方が、メモリ例外が発生する可能性のある大きなデータブロックを取得するよりも、おそらく効率的です。巨大なXMLファイルは、しばしばメモリ例外を引き起こします。そして、あなたは今、それをやっているやり方でブロック内のxmlを効果的に読み取るxmlreaderを使う必要があります。 – jdweng
ここで何をしようとしていますか?問題は何ですか?タスクが返された後まで、このメソッドからの応答が得られないという問題がある場合は、それが予想されます。 – Paddy
@Paddy:問題は、ドキュメントごとにバックグラウンドで 'client.PostAsync(SupplierLinkUri、httpContent);'を実行するために 'await'を使用していますが、同期的に実行されています。 –