Я работаю с MS-Test для написания модульных тестов. большинство моих тестов имеют продолжительность менее 0,1 секунды. Если пользователь желает, он может прервать запросы, нажав кнопку, которая затем вызывает метод Abort.
private Thread first;
private Thread second;
private string uri = "http://somewhere";
public void Main()
{
first = new Thread(GetFirst);
first.Start();
second = new Thread(GetSecond);
second.Start();
// Some block on threads... like the Countdown class
countdown.Wait();
}
public void Abort()
{
try
{
first.Abort();
}
catch { // do nothing }
try
{
second.Abort();
}
catch { // do nothing }
}
private void GetFirst(object state)
{
MyHandler h = new MyHandler(uri);
h.RunRequest();
}
private void GetSecond(object state)
{
MyHandler h = new MyHandler(uri);
h.RunRequest();
}
Первый поток прерывается из-за SocketException:
A blocking operation was interrupted by a call to WSACancelBlockingCall
Второй поток зависает на GetResponse ().
Каким образом могу ли я прервать оба этих запроса таким образом, чтобы веб-сервер знал, что соединение было прервано? и / или Есть ли лучший способ сделать это?
UPDATE
Как предложено, хорошей альтернативой было бы использование BeginGetResponse. Однако у меня нет доступа к объекту HttpWebRequest - он абстрагируется в классе MyHandler
. Я изменил вопрос, чтобы показать это.
public class MyHandler
{
public void RunRequest(string uri)
{
HttpWebRequest req = HttpWebRequest.Create(uri);
HttpWebResponse res = req.GetResponse();
}
}