我的桌面.NET 3.5应用程序使用WebRequest.BeginGetResponse
发出用于实现长轮询的请求。此请求通常需要10秒或更长时间才能处理。问题是BeginGetResponse
执行等待请求在线程池上完成,然后线程池似乎正在挨饿。有没有办法如何指定自定义线程或BeginGetResponse
使用的自定义线程?
作为替代方案,我也可以使用我自己的线程使用WebRequest.GetResponse
执行同步请求(希望这是really synchronous in .NET 3.5,它was not in .NET 1.0),但是我有一个问题我无法当我需要退出应用程序时,提前终止请求,因为我看不到如何中止同步请求的干净方法。
答案 0 :(得分:1)
我不知道您使用的是WPF还是Windows窗体..这是一个WPF示例。
WebRequest w = HttpWebRequest.Create("http://www.google.com");
Dispatcher dispatcher = Dispatcher.CurrentDispatcher;
Thread thread = new Thread(new ThreadStart(() =>
{
WebResponse response = w.GetResponse();
dispatcher.BeginInvoke(new Action(() =>
{
// Handle response on the dispatcher thread.
}), null);
}));
thread.IsBackground = true;
thread.Start();
注意IsBackground = true。因此,您的应用程序将在退出时终止它。 也可以将HttpWebRequest.Create放在线程方法中。
Windows.Form等效
WebRequest w = HttpWebRequest.Create("http://www.google.com");
Thread thread = new Thread(new ThreadStart(() =>
{
WebResponse response = w.GetResponse();
this.BeginInvoke(new Action(() =>
{
// Handle response on the dispatcher thread.
}), null);
}));
thread.IsBackground = true;
thread.Start();
此是表单/控件