2012-04-24 9 views
1

私はasp.netのために多くのマルチスレッドを使用していません。大きな一時ファイルをフォルダにアップロードするWebアプリケーションがあります。私はその一時ファイルをアップロードしてアップロードした後でそれを使って他のことをしたいと思います。ユーザーがウェブサイトにいなくても別のスレッドでこの作業を行うことはできますか?助けや提案をありがとう。asp.netのマルチスレッド

1.ユーザー投稿大ファイル 2.サーバーへのアップロード時の温度 3.アップロードが完了しました。私はユーザーの反復なしで実行できるが、ユーザーによってトリガされる別のスレッド/ワーカーを実行したいと思います。

void uploading(){ 
//Uploading file To server 
} 
void Submitclick(){ 
Start a Thread 
Thread thread = new Thread(DoThreadWork);// does the user still need to be logged in? 
Send to another page 
} 
void DoThreadWork(){Do this in background} 
+0

私は[これを避けることを提案します](http://stackoverflow.com/questions/5553001/how-should-i-perform-a-long-running-task-in-asp-net-4/5553048# 5553048)。 –

答えて

8

間違いなく、私はかなりのものをやるためにASP.NETでかなりのバックグラウンドスレッドを使用しています。サーバーを完全に制御できれば、別のアプリケーションまたはWindowsサービスでバックグラウンドコードを実行するほうがより洗練されたものになる可能性があります。

あなたのIISアプリケーションがWebリクエストに応答するだけのことを心配するのは、より良いことです。

また、ASP.NET 2.0にバックグラウンドスレッドがあり、処理されない例外がある場合、既定ではアプリケーションプールがリセットされます。ここ

詳細情報:http://blogs.msdn.com/b/tess/archive/2006/04/27/584927.aspx

// 3つのdownvotes?

聞いて、バックグラウンドスレッドで何かを実行することは避けられません。私はいくつかの状況でこれをヒットしました:私たちは バックグラウンド処理を扱うために別のアプリを展開することはできませんでしたソフトウェア に無理な姿勢を持つ企業で働いてきた

  • 。私はWindowsサービスを主張しましたが、 が却下され、バックグラウンドスレッドで実装するように言われました。明らかに 私はその会社から健康的な環境に移りましたが、それは です。実際には、これはあなたが時には不合理な状況に対処しなければならない場合があります。 。
  • ホストされている環境では、別のプロセスにオフロードするオプションが常にあるとは限りません。

質問があれば可能でした。私はその質問に答えています。

+2

厳しいそれは可能ですか?そうですが、何か他のものを使用して、未処理の例外に注意する必要があります。 –

-1

スレッドプールを使用できます。サンプルコードは、次のような記事に依存しています。http://msdn.microsoft.com/en-us/library/3dasc8as(v=vs.80).aspx

最初に作業を行う方法を書いてください。あなたがメソッドを呼び出したいコードの代わりに、より

public void DoWork(object threadContext) 
{ 
} 

... 
var threadParam = ... // Put any value you want to be used by the DoWork method 
ThreadPool.QueueUserWorkItem(DoWork, threadParam); 

方法は、システムの意志までキューに入れられますメソッドは、Object型の1つの引数を取得する必要がありますリクエストが終了したかどうかにかかわらず、作業を処理し、メソッドを実行するための無償のスレッドです。

+0

ASP.NETサイトでのバックグラウンド処理の使用に関する1つの警告。 IISは任意の時点でアプリケーションをリサイクルし、実行中のバックグラウンドスレッドを強制終了します。したがって、スレッドプールスレッドが正常に実行されるという保証はありません。それが問題であれば、Windowsサービスを使用してバックグラウンド処理を行う方がよいでしょう。 – Steven

+0

アプリケーションプールをリサイクルする前に、アプリケーションはGlobal.asax Application_Endメソッドを使用してキャプチャできるイベントを受信します。この方法では、必要なチェックを行い、実行中のスレッドに対処することができます(実行中のスレッドと通信する必要があるため、コードは少し複雑になります)。 –

0

ファイルのアップロードをウェブサイトのユーザーとのやりとりから切り離したい場合は、ファイルがアップロード準備ができてファイルをアップロードするかどうかを常に確認するWindowsサービスを作成できます。

+1

サービスを準備しているときにもメッセージを表示できます。 –

+0

プロセス間での呼び出しは可能ですか? – Adil

+0

WindowsサービスでホストされているWCFサービスを呼び出すのが最も簡単な方法の1つです。 –