2016-11-17 65 views
1

我正在创建一个asp.net web API项目。 这将是一个日志记录服务。Asp.Net Web API,'async Task'或'async void'作为返回类型

应用程序将通过进行异步调用来使用此服务。它主要是“消防和遗忘”的原则。我不想从服务中返回任何东西。 现在我的问题是我应该创建与'异步任务'或'async void'的web-API方法作为返回类型。我是指Async/Await - Best practice

+0

如果你不关心从服务中返回异常,'async void'应该可以正常工作。 – user5226582

+0

[从WEB API控制器中异步方法返回无效]的可能重复(http://stackoverflow.com/questions/11915138/returning-void-in-async-method-from-web-api-controller) –

回答

0

async当然任务 - 这使您的服务器更具可扩展性。 J Richter解释了为什么(我认为没有人能更好地解释)。

3

我不想从服务中返回任何东西。

HTTP WebAPI必须返回至少一个状态码。这就是HTTP的工作原理。

我的问题是我应该创建带有'async Task'或'async void'的web-API方法作为返回类型。

the referenced article中所述,您应该避免async void。您应该只使用async void作为事件处理程序(或逻辑上是事件处理程序的事物)。控制器操作不是事件处理程序。因此,您应该使用async Task

1
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); 
      } 
     }