2011-01-22 20 views
2

私のウェブサイトでは、ウェブサイトの主な活動やパフォーマンスに影響を与えるべきでない反復的な作業を行う必要があります。スレッド処理を使用して.NETで反復プロセスを呼び出す方法

私はスレッドを使用する必要があると思います。私は.Netのスレッディングについては初めてです。どのようにスレッド化を使用するには?

チュートリアルや記事への参照は大きな助けになります。

+2

これは、Asp.Net Webサイト内のスレッドで行うことができますが、バックグラウンドプロセス用に別のWindowsサービスを作成する方がはるかに簡単です。 – Paco

答えて

1

ここでは、行う方法についての素晴らしいチュートリアルですMuli-threaded applications in .NET別のスレッドで作業を行う簡単な方法は、BackgroundWorkerを使用することです。

Web上の他のスレッドで大量のタスクを処理する場合は、Ajaxを使用してリクエストを開始し、回答を「ポーリングする」ことができます。

MSDN:Use Threads and Build Asynchronous Handlers in Your Server-Side Web Codeの記事は少し古いですが、読んで基本的な理解を得ることができると思います。

0

.NETでマルチスレッドを使用する方法はいくつかあります。すでにmentionnedとして が、あなたは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を使用し、より多くの手動で物事を行うことができます。あなたは何らかのコントロールを得ることができますが、あまり単純ではありません。

関連する問題