과거에는 스레드와 작업으로 프로그래밍하는 것이 순진한 사람에게 매우 위험하다는 이야기를 많이 들었습니다. 글쎄, 나는 순진하지만 언젠가는 배워야 해. 제 3 자에게 전화해서 응답을 기다려야하는 프로그램 (실제로는 ASP.Net의 Generic Handler입니다)을 만들고 있습니다. 기다리는 동안 처리기가 다른 작업을 계속하도록하고 싶습니다. 따라서 제 3 자 웹 요청을 비동기 적으로 수행하는 방법을 알아 내려고하고 있습니다. 내가받은 몇 가지 다른 질문에 대한 답변을 기반으로, 여기에 나와있는 것이 있지만, 처리기가 여러 번 동시에 호출 될 때 큰 문제가 발생하지 않도록하고 싶습니다.작업을 이산 적으로 유지하기
이 테스트하려면 콘솔 프로젝트를 빌드해야합니다.
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();
}
}
I는 별도의 개체 (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 개를 동시에 실행하면 각 인스턴스마다 자체 메모리와 속성이 있다는 사실에 의지 할 수 있습니다. 맞습니까? 그리고 그 줄 "완료 = 사실;" 그리고 Generic Handler의 모든 인스턴스가 죽게 될 것입니다.
여러 인스턴스를 실행하기 위해 .bat 파일을 작성했으며 각각의 특정 개체에 설정된 GUID는 각 인스턴스마다 동일하게 유지되는 것으로 보이지만 ... 정말 무언가를하지 않는 것은 엉덩이에서 나를 완전히 무는 것입니다.
내가 가진 이전에 제공 한 링크의 원래 코드는 두 가지 방법 (내가 사용한 메서드와 Factory.StartNew 메서드)을 모두 보여줍니다. 나는 그들 모두를 시험해 보았다. 나는 Factory를 유지했다는 것을 생각했다 .Start 새로운 방법, 그러나 분명히 나는 1 단계를 너무 많이 실행 취소했다. 나는 확실히 StartNew 버전을 사용할 것이다. 도움을 주셔서 감사합니다, Brandon. –
문제 없습니다, 행운을 비네. – BrandonZeider
이렇게하면 문제가 해결 되었습니까? – BrandonZeider