Asp.Net Web API,'async Task'OR'async void'作为返回类型

时间:2016-11-17 12:52:52

标签: asynchronous async-await

我正在创建一个asp.net web API项目。 这将是一项日志服务。

应用程序将通过异步调用来使用此服务。它主要是“火与忘”的原则。我不希望退回服务中的任何内容。 现在我的问题是我应该使用'async Task'或'async void'作为返回类型创建web-API方法。

我指的是Async/Await - Best practice

3 个答案:

答案 0 :(得分:3)

  

我不希望退回服务中的任何内容。

HTTP WebAPI必须返回一些内容,至少是一个状态代码。这就是HTTP的工作方式。

  

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

the referenced article所述,您应该避免Get-Content -Path C:\folder\thisisalog.log -Tail 1 -Wait | where {if ($_ -match "Remote_http") {write-host "run code here"}} 。您应该只将async void用于事件处理程序(或逻辑上事件处理程序的事物)。控制器操作不是事件处理程序。因此,您应该使用async void

答案 1 :(得分: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);
            }
        }

答案 2 :(得分:0)

异步任务当然 - 这使您的服务器更具可扩展性。 Here J里希特解释了为什么(我认为没人能更好地解释)。