我知道这是一个流行的 C# 问题。不过我认为我的问题很具体。 我计划向网络服务器发出两个请求。第一个请求是一个长 GET。 Web 服务器不会立即回复,请等待并保持 C# 客户端连接。同时在另一个任务中我正在执行 POST 请求。
问题:如果我设置与第一个请求相同的cookie(PHPSESSION),
PostAsync
会阻塞并等待第一个请求的完成。如果没有 cookie,它不会阻塞(!),但这没有意义。
我尝试过的:
SendAsync
和 HttpRequestMessage
HttpClient
并复制 cookies。ServicePointManager.FindServicePoint(new Uri(url)).ConnectionLimit
C# .NET 4.7.2
问题:如何添加更多并行度?
更新:我想确认:
PostAsync
和SendAsync
在没有cookie的情况下不会阻塞。如果我从长GET复制cookie,请求将被阻塞并等待GET完成。如果我中断长 GET,Post 和 Send 立即成功完成。
这是由 PHP 后端的一种称为会话锁定的机制引起的,该机制将任何脚本的执行限制为每个会话 ID 一个。这是为了防止同一用户会话中出现并发问题。
session_write_close()
,以便释放同一会话中的其他请求。
如果您不控制后端,那么您唯一的选择就是创建一个新会话。
请注意,会话锁定将应用于给定会话下的所有请求,即使是从不同的浏览器、主机甚至网络发送的请求。