public **HttpResponseMessage** GetContacts()
{
var result = db.Contacts().ToList();
return this.Request.CreateResponse(HttpStatusCode.BadRequest, result);
}
要调用此ASYNC,是否足以添加“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);
}
答案 0 :(得分: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
intro有帮助。
答案 1 :(得分:2)
正如你所说,为了使它异步,你应该确保你的方法中有异步调用,否则没有区别。
如果您在第二个示例中执行此操作,则将使用异步方法。但请注意,这根本不会影响客户端。它唯一能做的就是在数据库调用执行时释放服务器上的一个线程。