Я все еще не совсем понимаю об асинхронном режиме и жду в .net 4.5. До сих пор, я думаю, я понимаю, что ждут:
- помещает функцию (справа) в отдельный поток.
- возвращает выполнение текущему вызову функции
- но удерживает остальную часть текущего кода функции "заложник" до тех пор, пока ожидающая (асинхронная) функция не будет завершена.
Пожалуйста, поправьте меня, если я что-то не понимаю. Итак, если это верно, я застрял с функцией 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-сайту или мобильному приложению)? Если да, то это будет 201, 400, 500 (лучше не), другие?