gpt4 book ai didi

c# - 调用 Async WebAPI 后,控制不会返回到等待的 webClient

转载 作者:太空狗 更新时间:2023-10-30 01:30:38 25 4
gpt4 key购买 nike

我们有一个 Restful Client-Sever 环境,我正在尝试调试我的代码,其中客户端代码如下所示:

await Client.DoWork(Id);

虽然服务器代码如下所示:

 public virtual async Task<IActionResult> DoWork(long Id)
{
return Ok();
}

请注意,客户端是从 https://github.com/swagger-api/swagger-codegen 代码自动生成的服务的网络客户端。

自动生成的代码永远不会返回的点如下所示:

var response_ = await client_.SendAsync(request_,
System.Net.Http.HttpCompletionOption.ResponseHeadersRead,
cancellationToken).ConfigureAwait(false);

这就是控件消失的地方

  • 这里可能有帮助也可能没有帮助的一件事是服务调用是通过代理进行的。不确定这是否会改变什么

当客户端调用 API 时,我可以看到它转到 Return OK() 并且我在 Fiddler 中看到它确实返回了 200OK 但控制永远不会返回到调用方法。我该如何解决这个问题?

最佳答案

您已经发现将 .Wait() 添加到控制台应用程序中的异步方法可以解决问题。这是关于 How Async and Await works 的一个很好的答案.以及答案中提到的文章Async and Await .

When the await operator is passed an incomplete task ... then by default await will capture the current context and return an incomplete task from the method.

所以基本上当客户端开始与服务器方法进行异步通信时返回未完成的任务。并且因为在 Main 方法控制台应用程序中没有等待它在客户端从服务器获得响应之前退出。

控制台应用程序中没有SynchronizationContext,因此可以安全地使用.Wait() 方法或.Result 属性来阻止线程进入Main 方法,直到异步操作完成。

关于c# - 调用 Async WebAPI 后,控制不会返回到等待的 webClient,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44031524/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com