В прошлом я много слышал о том, что программирование с помощью Threads и Tasks очень опасно для наивного.Ну, я наивен, но мне нужно учиться когда-нибудь.Я делаю программу (на самом деле это универсальный обработчик для ASP.Net), которая должна вызывать третье лицо и ждать ответа.Во время ожидания я хотел бы, чтобы обработчик продолжал делать некоторые другие вещи, поэтому я пытаюсь выяснить, как выполнить сторонний веб-запрос асинхронно.Основываясь на некоторых ответах на некоторые другие вопросы, которые я получил, вот что я придумал, но я хочу убедиться, что у меня не возникнет больших проблем, когда мой обработчик вызывается несколько раз одновременно.
Чтобы проверить это, я создал консольный проект.
class Program
{
static void Main(string[] args)
{
RunRequestAsynch test = new RunRequestAsynch();
test.TestingThreadSafety = Guid.NewGuid().ToString();
Console.WriteLine("Started:" + test.TestingThreadSafety);
Task tTest = new Task(test.RunWebRequest);
tTest.Start();
while (test.Done== false)
{
Console.WriteLine("Still waiting...");
Thread.Sleep(100);
}
Console.WriteLine("Done. " + test.sResponse);
Console.ReadKey();
}
}
Я создаю отдельный объект (RunRequestAsynch), устанавливаю для него некоторые значения, а затем запускаю его.Пока это обрабатывается, я просто вывожу строку в окно консоли.
public class RunRequestAsynch
{
public bool Done = false;
public string sResponse = "";
public string sXMLToSend = "";
public string TestingThreadSafety = "";
public RunRequestAsynch() { }
public void RunWebRequest()
{
Thread.Sleep(500);
// HttpWebRequest stuff goes here
sResponse = TestingThreadSafety;
Done = true;
Thread.Sleep(500);
}
}
Итак ... если я запускаю 1000 из них одновременно, я могу рассчитывать на то, что каждый экземпляр имеет свою собственную память и свойства, верно?И что строка "Done = true;"не сработает, и тогда все экземпляры Generic Handler умрут, верно?
Я написал файл .bat для запуска нескольких экземпляров, и указание, которое я установил для каждого конкретного объекта, похоже, осталось прежнимдля каждого случая - это то, что я хочу ... но я хочу убедиться, что я не делаю что-то действительно глупое, которое укусит меня в зад при полной нагрузке.