2017-11-13 23 views
0

私は、接続サービスへのasp.netコア2.0のWCFサービスのエンドポイントを追加し、私はそれを使用しようとするが、クライアントとの..asyncWCFclient操作のみ非同期ネットコア2.0

で終わるだけの機能があります私はasync.を使用したくないですが、.asyncなしの機能はありません

どうしたらいいですか?

代わりの

var response = SystemClient.SearchCountriesAsync(.... 

私は

var response = SystemClient.SearchCountries(... 

ことを利用したいが、それはそのエラーに

エラーCS1061を与えることを使用して 'SystemClient' 'SearchCountries' の定義が含まれていません。 'SystemClient'型の最初の引数を受け入れる拡張メソッド 'SearchCountries'が見つかりませんでした(usingディレクティブまたはアセンブリ参照がありません)

enter image description here

+0

生成されたコードに問題はありません。 *すべて*が非同期のときに非同期を使用するのはなぜですか? HttpClientは非同期です。同期されたメソッドは、実際には非同期ではありませんでした。フレームワークは、実際の非同期操作で常にブロックされ、同期の錯覚を与えます。 –

+0

別の言い方をすれば、これはプログラミング上の問題ではありません。あなたは 'async'に慣れ親しむべきです。ランニングコストも削減できます。ブロッキングはスピンウェイトを使用するため、CPUがアイドル状態でないことを意味します。ブロックすることで、同じ量のトラフィックに対して、より大きなマシンまたはより多くのVMを購入する必要があります。少なくとも1つの新しいVMを支払うことを意味するときに「非同期を使用したくない」という理由を正当化することは難しい –

+0

2012年以来、BTW WCFは非同期メソッドを生成します。 –

答えて

3

あなたのクライアントは、同期メソッドを公開しませんが、それはあなたのための問題になることはありません。代わりに、非同期メソッドを呼び出すの

はちょうどこの操作を行います。それがコールをブロックするよう

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(); 
} 
+0

'.GetAwaiter()。GetResult()'は、 AggregateExceptionの例外です。しかし、これは非常に高価なものです。ブロックすることで単純化するものは何もありませんが、無駄なCPU、スレッド、拡張機能でコストがかかります。 –

+2

私はこれに同意します。 – Rob

+0

@Robさん、ありがとうございます。行末を追加することは、works.Isこの作品はパフォーマンスの問題が原因ですか?私は私のコードのパフォーマンスを非同期または非同期ではないproblem.Iの私のコードが良いパフォーマンスで動作するようにしたい – user1688401

関連する問題