2011-01-22 4 views
2

내 웹 사이트에서 주요 활동 및 웹 사이트 성능에 영향을 미치지 않아야 할 반복적 인 작업을 수행해야합니다.스레딩을 사용하여 .NET에서 반복적 인 프로세스를 호출하는 방법?

그래서 스레딩을 사용해야한다고 생각합니다. 나는 스레딩에있어 새로운 .NET이다. 스레딩을 사용하는 방법은 .NET입니까?

모든 자습서 또는 모든 기사에 대한 참조는 큰 도움이 될 것입니다.

+2

Asp.Net 웹 사이트 내에서 스레딩하여이 작업을 수행 할 수 있지만 백그라운드 프로세스 용으로 별도의 Windows 서비스를 만드는 것이 훨씬 쉽습니다. – Paco

답변

1

여기에 훌륭한 튜토리얼이 있습니다 Muli-threaded applications in .NET 다른 스레드에서 작업을 수행하는 간단한 방법은 BackgroundWorker을 사용하는 것입니다.

웹을 통해 다른 스레드에서 많은 작업을 수행 할 때 Ajax를 사용하여 요청을 시작한 다음 답변을 "폴링"할 수 있습니다.

MSDN : Use Threads and Build Asynchronous Handlers in Your Server-Side Web Code에 기사가 있습니다. 조금 낡았지만 읽으면 기본적인 이해를 얻을 수있을 것 같습니다.

0

.NET에서 멀티 스레딩을 사용하는 여러 가지 방법이 있습니다. 이미 언급했듯이 BackgroundWorker를 사용할 수 있지만 TPL을 .NET에서 사용할 수 있으므로 Task based Asynchronous Programming을 사용할 수도 있습니다.

즉, 수행해야 할 작업을 줄일 수 있습니다. 스티븐 클리어 리에서

Task.Factory.StartNew(() => DoSomeWork()); 

This 기사처럼 간단 다른 스레드는 흥미로운 읽기입니다. BackGroundWorker와 TPL을 비교합니다.

또한 asp.net에서 장기 실행 작업을 실행하면 요청을 완료하는 데 시간이 오래 걸릴 수 있습니다. 예를 들어 Hangfire과 같은 다른 서비스에서 장기 실행 태스크를 실행하는 것이 더 나을 수도 있습니다.

0

ASP.NET 응용 프로그램에서이 작업을 수행하는 올바른 방법은 HostingEnvironment.QueueBackgroundWorkItem입니다. 이렇게하면 IIS 응용 프로그램을 재활용하거나 컴퓨터를 종료 할 때 백그라운드 작업이 정상적으로 종료됩니다. 한 번 어딘가에 응용 프로그램의 시작에

콜이 :

HostingEnvironment.QueueBackgroundWorkItem(RunInBackground); 

그리고 구현과 같은 방법

private async Task RunInBackground(CancellationToken cancellationToken) 
{ 
    while (!cancellationToken.IsCancellationRequested) 
    { 
     // Repetetive task 

     await Task.Delay(TimeSpan.FromMinutes(1)); 
    } 
} 

또한 HostingEnvironment.RegisterObject을 사용하고 더 수동으로 일을 할 수 있습니다. 당신은 약간의 통제를 얻을 것이지만 덜 단순 할 것입니다.

관련 문제