Пропускать модульные тесты, которые занимают много времени

Я работаю с 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();
  }
}
6
задан Armbrat 21 September 2010 в 13:39
поделиться