当你在控制器中使用Async/Await时,是否必须从AsyncController继承才能实现真正的异步?如果使用Controller,是否仍然是异步的?Asp.net web api呢?我认为没有AsyncApiController。目前我只是从controller继承,并且它可以工作,但它是否真正是异步的呢?
当你在控制器中使用Async/Await时,是否必须从AsyncController继承才能实现真正的异步?如果使用Controller,是否仍然是异步的?Asp.net web api呢?我认为没有AsyncApiController。目前我只是从controller继承,并且它可以工作,但它是否真正是异步的呢?
MVC 4中AsyncController
类的XML注释如下:
为了与ASP.NET MVC 3向后兼容而提供。
这个类本身是空的。
换句话说,你不需要它。
/// <summary>
/// Assuming this function start a long run IO task
/// </summary>
public Task<string> WorkAsync(int input)
{
return Task.Factory.StartNew(() =>
{
// heavy duty here ...
return "result";
}
);
}
// GET api/values/5
public Task<string> Get(int id)
{
return WorkAsync(id).ContinueWith(
task =>
{
// disclaimer: this is not the perfect way to process incomplete task
if (task.IsCompleted)
{
return string.Format("{0}-{1}", task.Result, id);
}
else
{
throw new InvalidOperationException("not completed");
}
});
}
/// <summary>
/// Assuming this function start a long run IO task
/// </summary>
public Task<string> WorkAsync(int input)
{
return Task.Factory.StartNew(() =>
{
// heavy duty here ...
return "result";
}
);
}
// GET api/values/5
public async Task<string> Get(int id)
{
var retval = await WorkAsync(id);
return string.Format("{0}-{1}", retval, id);
}