5

我完全理解 HTTP 世界不是单向调用的最佳选择,而 WebApi 最适合 HTTP 详细通信。毫无疑问,WCF 是这里的赢家。但是,如果你已经有一个暴露了一堆动词的 ApiController 并且在某些时候你还需要一个单向调用呢?而且您不想为此托管/维护另一个服务 (WCF)。

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

如果您不处理响应,那么您将得到类似于即发即弃的东西。这是 WebApi 中的唯一方法还是有其他解决方案?

4

2 回答 2

6

为什么不直接这样调用而忽略返回的任务呢?

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

我对所有调用都执行此操作,并在必要时使用响应管道中的处理程序来处理响应。

于 2012-12-18T19:21:05.930 回答
5

您最好的选择是启动一个新任务并立即发送响应而不是返回任务:

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

            );

    }
于 2012-12-18T17:39:26.117 回答