Fire-Forget和单向呼叫ASP.NET WebAPI



我完全理解,http世界不是单向通话的最佳选择,并且该WebAPI最适合HTTP冗长通信。毫无疑问,WCF是这里的赢家。但是,如果您已经有一个apicontroller,该动词暴露了一堆动词,并且在某个时候您也需要一个单向通话?而且您不想为此托管/维护另一个服务(WCF)。

Task<HttpResponseMessage> response = client.PostAsJsonAsync<Log>("api/log", log)

如果您不处理响应,那么您有类似于火灾的响应。这是WebAPI中的唯一方法还是还有另一个解决方案?

为什么不这样称呼并忽略返回的任务?

client.PostAsJsonAsync<Log>("api/log", log);

我都会使用所有电话,并在响应管道中使用处理程序,以便在必要时处理响应。

您最好的选择是开始一个新任务,然后立即发送响应而不是返回任务:

public void PostDoFireAndForget() // and NOT public Task PostDoFireAndForget()
    {
        Task.Factory.StartNew
            (() =>
                {
                    // ... start the operation here
                    // make sure you have an exception handler!!
                }
            );
    }

最新更新