.net 4.5 での async と await についてはまだよくわかりません。これまでのところ、私はそれが待っていることを理解していると思います:
- 関数を(その右側に)別のスレッドに配置します。
- 実行を現在の関数の呼び出し元に戻します
- ただし、待機中の(非同期)関数が終了するまで、現在の関数の残りのコード「人質」を保持します。
私が何か誤解している場合は、私を修正してください。したがって、上記が当てはまる場合、非同期が必要な ApiController の Post 関数に行き詰まっています。
[HttpPost]
public async Task<HttpResponseMessage> Post([FromBody]MyObject obj)
{
myDataContext.MyObjects.InsertOnSubmit(obj);
myDataContext.SubmitChanges();
await SomeReallyLongRunningTaskAsync();
// obj would now have the new Id, which I'm really after.
return Request.CreateResponse(HttpStatusCode.Created, obj);
}
したがって、これを正しく理解している場合、Post は実行を終了し、呼び出した人に制御を返しmyApiController.Post(obj)
ます。しかし、「人質」をHttpResponseMessage
待っているので、まだオブジェクトを持っていません。return Request.CreateResponse(HttpStatusCode.Created, obj);
上記の単純な例では、呼び出しはすぐにクライアント (つまり、クライアント JS Web サイトまたはモバイル アプリ) に返されますか? もしそうなら、それは201、400、500(しないほうがいい)、その他ですか?