我正在创建一个asp.net web API项目。 这将是一个日志记录服务。Asp.Net Web API,'async Task'或'async void'作为返回类型
应用程序将通过进行异步调用来使用此服务。它主要是“消防和遗忘”的原则。我不想从服务中返回任何东西。 现在我的问题是我应该创建与'异步任务'或'async void'的web-API方法作为返回类型。我是指Async/Await - Best practice。
我正在创建一个asp.net web API项目。 这将是一个日志记录服务。Asp.Net Web API,'async Task'或'async void'作为返回类型
应用程序将通过进行异步调用来使用此服务。它主要是“消防和遗忘”的原则。我不想从服务中返回任何东西。 现在我的问题是我应该创建与'异步任务'或'async void'的web-API方法作为返回类型。我是指Async/Await - Best practice。
async当然任务 - 这使您的服务器更具可扩展性。 J Richter解释了为什么(我认为没有人能更好地解释)。
我不想从服务中返回任何东西。
HTTP WebAPI必须返回至少一个状态码。这就是HTTP的工作原理。
我的问题是我应该创建带有'async Task'或'async void'的web-API方法作为返回类型。
如the referenced article中所述,您应该避免async void
。您应该只使用async void
作为事件处理程序(或逻辑上是事件处理程序的事物)。控制器操作不是事件处理程序。因此,您应该使用async Task
。
using System.Web.Http;
using AysncTask = System.Threading.Tasks.Task;
[HttpPut]
[Route("api/cleardata/{id}/{requestId}/")]
public async AysncTask ClearData(Guid id, Guid requestId)
{
try
{
await AysncTask.Run(() => DoClearData(id, requestId));
}
catch (Exception ex)
{
throw new Exception("Exception in ClearData", ex);
}
}
如果你不关心从服务中返回异常,'async void'应该可以正常工作。 – user5226582
[从WEB API控制器中异步方法返回无效]的可能重复(http://stackoverflow.com/questions/11915138/returning-void-in-async-method-from-web-api-controller) –