我正在創建一個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) –