相关疑难解决方法(0)

在高流量场景中使用ASP.NET中的ThreadPool.QueueUserWorkItem

我一直认为使用ThreadPool(比如说非关键的)短期背景任务被认为是最佳实践,即使在ASP.NET中也是如此,但后来我发现这篇文章似乎暗示了其他 -这个论点是你应该离开ThreadPool来处理ASP.NET相关的请求.

所以这就是我到目前为止一直在做的小异步任务:

ThreadPool.QueueUserWorkItem(s => PostLog(logEvent))
Run Code Online (Sandbox Code Playgroud)

而且文章建议明确地创建一个线程,类似于:

new Thread(() => PostLog(logEvent)){ IsBackground = true }.Start()
Run Code Online (Sandbox Code Playgroud)

第一种方法具有管理和限制的优点,但是有可能(如果文章是正确的)后台任务正在争夺具有ASP.NET请求处理程序的线程.第二种方法释放了ThreadPool,但代价是无限制,因此可能耗尽太多资源.

所以我的问题是,文章中的建议是否正确?

如果你的网站流量太大而你的ThreadPool已经满了,那么最好是带外,还是一个完整的ThreadPool意味着你无论如何都要达到你的资源限制,在这种情况下你不应该试图开始自己的线程?

澄清:我只是询问小型非关键异步任务(例如,远程日志记录)的范围,而不是需要单独过程的昂贵工作项(在这些情况下,我同意您需要更强大的解决方案).

asp.net multithreading threadpool

109
推荐指数
2
解决办法
4万
查看次数

来自c#程序的HTTP请求,无需响应

我已经完成了一些套接字工作,我必须发送一个请求,因为我想要一个回复,但我需要在C#中编写一些东西,只需要调用旧网页,大约需要10秒钟才能响应,而不是等待响应(故障将通过DB调用标记).

有一个简单的方法吗?

c#

6
推荐指数
2
解决办法
1万
查看次数

将http请求发送到服务器而不期待响应

我需要向服务器发送POST http请求,但不应该期待响应.我应该用什么方法呢?

我一直在用

 WebRequest request2 = WebRequest.Create("http://local.ape-project.org:6969");
 request2.Method = "POST";
 String sendcmd = "[{\"cmd\":\"SEND\",\"chl\":3,\"params\":{\"msg\":\"Helloworld!\",\"pipe\":\"" + sub1 + "\"},\"sessid\":\"" + sub + "\"}]";
 byte[] byteArray2 = Encoding.UTF8.GetBytes(sendcmd);
 Stream dataStream2 = request2.GetRequestStream();
 dataStream2.Write(byteArray2, 0, byteArray2.Length);
 dataStream2.Close();
 WebResponse response2 = request2.GetResponse();
Run Code Online (Sandbox Code Playgroud)

发送请求并获得回复.如果请求将从服务器返回响应,这可以正常工作.但是,根据我的需要,我只需要发送一个POST请求.并且没有与我发送的请求相关的响应.我该怎么做 ?

如果我使用request2.GetRespnse()命令,我收到"连接意外关闭"的错误

任何帮助将不胜感激.谢谢

c# post http request

5
推荐指数
1
解决办法
2万
查看次数

标签 统计

c# ×2

asp.net ×1

http ×1

multithreading ×1

post ×1

request ×1

threadpool ×1