问题描述
我正在使用较旧的WebClient
,并在致电System.Net.sockets.socketException
时得到以下WebClient.UploadString
:
(10048):每个套接字地址(协议/网络地址/端口)通常只允许使用一种。
这是调用WebClient.UploadString
的代码:
public bool UploadString(Uri endpoint,string accesstoken,string data)
{
var url = endpoint.AbsoluteUri;
using (var webClient = new WebClient())
{
ServicePointManager.SecurityProtocol |= SecurityProtocolType.Tls12;
webClient.Encoding = Encoding.UTF8;
webClient.Headers[HttpRequestHeader.ContentType] = "application/json";
webClient.Headers[HttpRequestHeader.Authorization] = $"Bearer {accesstoken}";
webClient.UseDefaultCredentials = true;
var exceptionData = "";
try
{
webClient.UploadString(endpoint,"POST",data);
}
catch (Exception exception)
{
exceptionData = $" Failed - {exception?.Message}";
// Exception logging code removed for brevity.
return false;
}
}
return true;
}
我正在parallel.foreach
循环中调用此代码,最大并行度为10:
private void StartQueueProcessor()
{
Task.Factory.StartNew(() =>
{
var parallelOptions = new ParallelOptions{MaxDegreeOfParallelism = 10 };
Parallel.ForEach(_logQueue.GetConsumingPartitioner(),parallelOptions,queueItem =>
{
// Make call to UploadString method above
似乎可以处理大约120,000个电话。然后它开始失败并显示此错误。
.Net Core 3.1的呼叫速率约为600每秒,.Net 4.8的呼叫速率约为200每秒。
注意:由于线程和异步问题,我无法使用HttpClient
。 (我花了一个星期或更长时间来尝试完成这项工作。)
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)