あなたのクライアントは、同期メソッドを公開しませんが、それはあなたのための問題になることはありません。代わりに、非同期メソッドを呼び出すの
はちょうどこの操作を行います。それがコールをブロックするよう
response = SystemClient.SearchAirportsAsync(credentials, SystemHelperLanguageTypes.English, SystemHelperSearchTypes.CodeSearch, "ist").Result;
これは、同期メソッドを呼び出します。 John Skeetsの回答hereを確認してください。
私は、提供されている非同期メソッドを使用することをお勧めします。これをサポートするには、アクションシグネチャを次のように変更する必要があります。
public async Task<IActionResullt> Index()
{
SystemClient SystemClient = new SystemClient();
Credential credential = new Credential();
credential.UserName = "username";
credential.UserPassword = "****";
var response1 = await SystemClient.SearchCountriesAsync(credentials, SystemHelperLanguageTypes.English, SystemHelperSearchTypes.CodeSearch, "TR");
var response = await SystemClient.SearchAirportsAsync(credentials, SystemHelperLanguageTypes.English, SystemHelperSearchTypes.CodeSearch, "ist");
//Do whatever you do with those responses
ViewBag.Language = "ar";
return View();
}
出典
2017-11-13 08:42:12
Rob
生成されたコードに問題はありません。 *すべて*が非同期のときに非同期を使用するのはなぜですか? HttpClientは非同期です。同期されたメソッドは、実際には非同期ではありませんでした。フレームワークは、実際の非同期操作で常にブロックされ、同期の錯覚を与えます。 –
別の言い方をすれば、これはプログラミング上の問題ではありません。あなたは 'async'に慣れ親しむべきです。ランニングコストも削減できます。ブロッキングはスピンウェイトを使用するため、CPUがアイドル状態でないことを意味します。ブロックすることで、同じ量のトラフィックに対して、より大きなマシンまたはより多くのVMを購入する必要があります。少なくとも1つの新しいVMを支払うことを意味するときに「非同期を使用したくない」という理由を正当化することは難しい –
2012年以来、BTW WCFは非同期メソッドを生成します。 –