Asynchronous Asp.NETWebAPI和#x27;异步任务';或';异步void';作为返回类型

Asynchronous Asp.NETWebAPI和#x27;异步任务';或';异步void';作为返回类型,asynchronous,async-await,Asynchronous,Async Await,我正在创建一个asp.net web API项目。 这将是一个日志服务 应用程序将通过进行异步调用来使用此服务。这主要是“用火遗忘”原则。我不想从服务中得到任何东西。 现在我的问题是,我应该创建返回类型为“async Task”或“async void”的web API方法吗 我指的是这个 当然是异步任务-这使您的服务器更具可伸缩性。里克特解释了原因(我想没有人能解释得更好) 我不想从服务中得到任何东西 HTTP WebAPI必须返回某些内容,至少是状态代码。HTTP就是这样工作的 我的问题是,

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

应用程序将通过进行异步调用来使用此服务。这主要是“用火遗忘”原则。我不想从服务中得到任何东西。 现在我的问题是,我应该创建返回类型为“async Task”或“async void”的web API方法吗


我指的是这个

当然是异步任务-这使您的服务器更具可伸缩性。里克特解释了原因(我想没有人能解释得更好)

我不想从服务中得到任何东西

HTTP WebAPI必须返回某些内容,至少是状态代码。HTTP就是这样工作的

我的问题是,我应该创建返回类型为“async Task”或“async void”的web API方法吗


如中所述,应避免
异步无效
。您应该只对事件处理程序(或逻辑上属于事件处理程序的事物)使用
async void
。控制器操作不是事件处理程序。因此,您应该使用
async Task

如果您不关心从服务返回异常,
async void
应该可以正常工作
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);
            }
        }