C#httpClient(blockforasynchronouscalls)deadlock目前的情况有一个client,通过HttpClient.GetAsync进行get请求。不幸的是,出于某种原因我们需要阻止这些调用。为此,请使用此Asynchelper类来避免上下文切换死锁(而不是仅使用.Result));publicstaticvoidRunSync(Funcfunc){AsyncHelper._myTaskFactory.StartNew(func).Unwrap().GetAwaiter().GetResult();然后实际调用如下所示:AsyncHelper.RunSync(AsyncFunction()Await_httpClient.GetAsync(uri,HttpCompletionOption.ResponseHeadersRead))问题在使用Netlimiter降低网络速度的压力测试期间,我们遇到了未处理请求的问题。例如,当我终止网络连接时(在NetLimiter中),这样的请求永远停留在客户端。它将保留在AsyncHelper.RunSync调用中,直到它进入httpClient.Timeout。是否应该在连接丢失时异常结束本次调用?我错过了什么吗?问题是HTTP连接通常通过TCP连接。因此,当您强行终止TCP连接而无法发送其“我在这里完成”(或FIN)数据包时,连接的另一端仍在愉快地等待更多数据,至少直到套接字上定义的超时.从上面配置的套接字查询操作。解决这个问题的一种方法是在套接字上设置TCPKeep-Alive。请注意,这与HTTPKeep-Alive有很大不同。另一种选择,似乎已经发生,是使用足够好的超时。以上就是C#学习教程的全部内容:C#httpClient(异步调用阻塞)死锁分享。如果对大家有用,需要进一步了解C#学习教程,希望大家多加关注——本文来自网络合集,不代表立场,如涉及侵权,请点击有权联系管理员删除。如需转载请注明出处:
