Использование ключевого слова async в сигнатуре метода для возврата задачи в конечную точку Web Api
Если бы я хотел написать неблокирующее действие веб-API, возвращаяTask
объект, я мог бы сделать это с или без использованияasync
ключевое слово как таковое:
public async Task<HttpResponseMessage> Get()
{
Func<HttpResponseMessage> slowCall = () =>
{
Thread.Sleep(2000);
return Request.CreateResponse(HttpStatusCode.OK, "Hello world");
};
var task = Task<HttpResponseMessage>.Factory.StartNew(slowCall);
return await task;
}
Без использования асинхронногоpublic Task<HttpResponseMessage> Get()
{
Func<HttpResponseMessage> slowCall = () =>
{
Thread.Sleep(2000);
return Request.CreateResponse(HttpStatusCode.OK, "Hello world");
};
var task = Task<HttpResponseMessage>.Factory.StartNew(slowCall);
return task;
}
Они оба работают правильно. Тем не менее, каждый пример, который я видел (в Интернете и в книгах) по написанию действия веб-API, которое возвращаетTask
используетasync
ключевое слово. Конечно, я понимаю, что это дает вам больше гибкости, так как позволяет вам контролировать то, что вы хотите «ждать», а что нет. Но при условии, что ваша функциональность может быть эффективно обработана в любом случае,