WCF HandleError System.InvalidOperationException 任务只有在完成状态下才能被释放

WCF HandleError System.InvalidOperationException A task may only be disposed if it is in a completion state

我被困在一个可能是概念性的或我遗漏的简单问题上。我有一个正在对服务器进行异步调用的桌面应用程序。

这涉及通过多个 类 的多个嵌套调用。我在整个调用链中都保持异步。

我能够始终如一地重现的主要问题是,当我将 HTTP 客户端传递给另一个服务时,它会产生异步 Post。

代码片段不是 %100 正确,只是想展示基本的

 public async Task<bool> SomeTask(IEnumerable<Dto> dtoList)
    {

           var response = await _corepointService.PostCore(request, _idbContext);
            if (response.StatusCode == HttpStatusCode.BadRequest)
            {
                success = false;
            }
        }
        return success;
    }


 public Task<HttpResponseMessage> PostCore(Dto request, IDBContext 
                    dbContext, HttpClient _httpClient)
    {

        var dto = new HttpRequestMessage
        {
            RequestUri = new Uri(request.Resource),
            Method = HttpMethod.Post,
            Content = new StringContent(request.Body, Encoding.UTF8,
                "application/json")
        };

        return _httpClient.SendAsync(dto);
    }

这是我尝试过的另一种选择,不传递 HttpClient 并创建一个新的。

 public Task<HttpResponseMessage> PostCore(Dto request, IDBContext 
                    dbContext)
    {
        var _httpClient = new HttpClient();
        var dto = new HttpRequestMessage
        {
            RequestUri = new Uri(request.Resource),
            Method = HttpMethod.Post,
            Content = new StringContent(request.Body, Encoding.UTF8,
                "application/json")
        };

        return _httpClient.SendAsync(dto);
    }

我收到的错误是

 WCF HandleError - System.InvalidOperationException: A task may only be disposed if it is in a completion state (RanToCompletion, Faulted or Canceled).

at System.Threading.Tasks.Task.Dispose(布尔处理) 在 System.Threading.Tasks.Task.Dispose() 在 System.ServiceModel.Dispatcher.MessageRpc.DisposeParametersCore(布尔排除输入) WCF HandleError - System.InvalidOperationException:任务只有在处于完成状态(RanToCompletion、Faulted 或 Canceled)时才能被释放。 在 System.Threading.Tasks.Task.Dispose(布尔处理) 在 System.Threading.Tasks.Task.Dispose() 在 System.ServiceModel.Dispatcher.MessageRpc.DisposeParametersCore(布尔排除输入) WCF HandleError - System.InvalidOperationException:任务只有在处于完成状态(RanToCompletion、Faulted 或 Canceled)时才能被释放。 在 System.Threading.Tasks.Task.Dispose(布尔处理) 在 System.Threading.Tasks.Task.Dispose() 在 System.ServiceModel.Dispatcher.MessageRpc.DisposeParametersCore(布尔排除输入)

在最终服务中进行异步 Post 时,我一直收到此错误。我只是不确定它是否相关,或者是某种种族关系。非常感谢任何帮助或异步信息的链接。我试图在 SO 上找到任何相关的帖子,但没有找到任何与此相关的内容。

谢谢!

请确保以下内容:

asyncPostCore 方法定义中

public async Task<HttpResponseMessage> PostCore(Dto request,
    IDBContext dbContext, HttpClient _httpClient){}

和'await' SendAsync 调用

return await _httpClient.SendAsync(dto);

希望对您有所帮助!

这是由桌面客户端中的包装器 class 引起的,该包装器正在返回一个任务并期望它正在等待的方法是同步的。

它与 HttpPost 或服务器本身中的任何异步代码无关。