ASP.NET WebApi中的Fire-forget和单向调用

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

Task response = client.PostAsJsonAsync("api/log", log) 

如果您没有处理响应,那么您将获得类似于“即发即忘”的内容。 这是WebApi中的唯一方法还是另一种解决方案?

为什么不这样调用并忽略返回的任务?

 client.PostAsJsonAsync("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!! } ); }