1

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

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}
4

3 に答える 3

8

それは間違いなく可能です。私はASP.NETでバックグラウンドスレッドをかなり使用して、ファンキーなことを行ってきました。サーバーを完全に制御できる場合は、別のアプリケーションまたはWindowsサービスでバックグラウンドコードを実行する方が適切な場合があります。

IISアプリがWeb要求に応答するだけで処理できるようにすることは、関心の分離をより適切に行うことができますが、それに対応していません。

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

詳細はこちら: http: //blogs.msdn.com/b/tess/archive/2006/04/27/584927.aspx

// 3つの反対票?

聞いてください、バックグラウンドスレッドで何かを実行することを避けることは常に可能ではありません。私はいくつかの状況でこれにぶつかりました:

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

問題は、それが可能かどうかでした。私はその質問に答えています。

于 2012-04-24T07:58:53.350 に答える
0

ファイルのアップロードをWebサイトのユーザー操作から分離する場合は、ファイルをアップロードする準備ができているかどうかを継続的にチェックしてファイルをアップロードするWindowsサービスを作成できます。

于 2012-04-24T07:44:22.423 に答える
-1

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

まず、作業を行うメソッドを記述します。メソッドは、オブジェクト型の引数を1つ取得する必要があります。

 public void DoWork(object threadContext)
 {
 }

それよりも、メソッドを呼び出したいコードの代わりに、次のようにします。

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

リクエストが終了したかどうかに関係なく、システムが作業を処理してメソッドを実行するための空きスレッドができるまで、メソッドはキューに入れられます。

于 2012-04-24T07:43:49.910 に答える