2016-11-17 55 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); 
      } 
     }