2017-05-02 12 views
3

私は、イントラネット上のクライアントに役立つWeb APIを設定しています。クライアントで作業する開発者の便宜のために、Web APIをクライアントと共有するインターフェイスに準拠させることを検討しています。以下に示すようなものです。ASP.NET Web API:非同期操作の欠点はありますか?

共有インターフェイスを使用する目的は、コンパイル時にクライアント開発者が検出できるWeb APIを変更することとほとんど関係があります。また、クライアントは、Web APIとの通信に使用されるHttpClientインスタンスの周りのラッパーに使用されるインターフェースを利用することができます。

クライアントの開発者は実装時にasyncawaitを使用したいと思いますが、私は「いいえ」と言いますか?

public interface IValueController 
{ 
    Task<string> ReadAsync(); 
    string ReadSync(); 
} 

[Route("api/v1/[controller]")] 
public class ValueController : Controller, IValueController 
{ 
    [HttpGet("async")] 
    public Task<string> ReadAsync() 
    { 
     return Task.FromResult("async!"); 
    } 

    [HttpGet("sync")] 
    public string ReadSync() 
    { 
     return "sync!"; 
    } 
} 

同期メソッドと非同期メソッドの両方を提供することに興味を持っているわけではありません。問題は、Web API操作を非同期として定義するのは面倒ですか?もしそうでなければ、私はオールインに行くよ!

-S

+0

正しく実行していない限り、非同期プログラミングを使用するのは面倒なことはありません。 –

+1

正規表現の問題を解決するようなものは、2つの問題があることを意味しますか? –

答えて

1

非同期使用する:

  1. 非同期API呼び出しを。
  2. 長時間実行中のデータベースクエリ。
  3. CPUにバインドされているタスク。
  4. 並列処理が必要な場合。

使用しない場合:すばやく実行するタスクや方法を記述しているとき。

注:デッドロックに注意すると、コンパイラは基本的な概念を理解しなくても非同期コードを記述して正常にコンパイルできます。

0

ほとんどの場合、共有インターフェイスを使用する目的は、コンパイル時にクライアント開発者が検出できるWeb APIを変更することです。

最近では、API記述(Swaggerなど)を自動生成し、それからクライアント(.NETや他の言語など)を自動生成するのが一般的です。このアプローチは、複数のクライアントを許可するだけでなく(例えば、1つのSwaggerクライアントはAPIのHTMLドキュメントであり、例とWebサイトから直接呼び出すことができます)、何もせずに同期/非同期変換を処理します「非同期署名のようなものですが、実際には同期」コードです。

つまり、非同期メソッドを同期して実装する場合は、それを防ぐことはできません。あなたが完全なASP.NETを使用している場合、非同期アクションは子アクションになることはできません。この制限は、ASP.NETコアには存在しません。

関連する問題