0
public **HttpResponseMessage** GetContacts()  
{  
   var result = db.Contacts().ToList();  
   return this.Request.CreateResponse(HttpStatusCode.BadRequest, result);  
}  

この呼び出しを非同期にするには、戻り呼び出しに「async Task<>」を追加するだけで十分ですか:

public **async Task<HttpResponseMessage>** GetContacts()  
{  
   var result = db.Contacts().ToList();  
   return this.Request.CreateResponse(HttpStatusCode.BadRequest, result);  
}  

または、データベースも呼び出しているため、すべて/一部の内部呼び出しも非同期にする必要があります。

public **async Task<HttpResponseMessage>** GetContacts()  
{  
   var result = **await** db.Contacts().ToList();  
   return this.Request.CreateResponse(HttpStatusCode.BadRequest, result);  
}  
4

2 に答える 2

3

async必要なときだけ使用する必要があります。一般に、最初に最低レベルを変更すると最も効果的です。つまり、コード内でブロッキング メソッドを見つけて、最初にそれらを非同期にします。

したがって、次のような開始コードで

public HttpResponseMessage GetContacts()
{
  var result = db.Contacts().ToList();
  return this.Request.CreateResponse(HttpStatusCode.BadRequest, result);
}

最初に変更するのはToListで、次のようになりToListAsyncます。

public HttpResponseMessage GetContacts()
{
  var result = await db.Contacts().ToListAsync();
  return this.Request.CreateResponse(HttpStatusCode.BadRequest, result);
}

次に、 を使用しているためawait、メソッドを次のようにマークする必要がありますasync

public async Task<HttpResponseMessage> GetContactsAsync()
{
  var result = await db.Contacts().ToListAsync();
  return this.Request.CreateResponse(HttpStatusCode.BadRequest, result);
}

私のasyncイントロが役に立つかもしれません。

于 2013-11-10T13:06:24.590 に答える
2

あなたが言うように、非同期にするためには、メソッド内に非同期呼び出しがあることを確認する必要があります。そうしないと、違いはありません。

2 番目の例のようにすると、非同期メソッドが作成されます。ただし、これはクライアントにはまったく影響しないことに注意してください。それが行う唯一のことは、データベース呼び出しの実行中にサーバー上のスレッドを解放することです。

于 2013-11-10T11:18:40.147 に答える