web-dev-qa-db-ja.com

ASP.NET Webアプリケーションでスレッドを作成する正しい方法

私はasmx Webサービスを作成していて、バックグラウンドを実行するためにスレッドを作成する必要がありますIOシステムデータを更新します。正しい方法は何ですか?スレッドを作成した結果に興味はありません。私はASP.NETワーカースレッドが読み込みを実行するスレッドを作成し、最終的に1つの割り当て(assign _alldata = newDataは、自分の大きな構造クラスSystemDataの両方のインスタンスがアトミックであると思う)を作成するだけなので、新しいスレッドは即座に伝播できます。

私は記事を読みました http://msdn.Microsoft.com/fi-fi/magazine/cc164128%28en-us%29.aspx#S2 これは、非スレッドプールスレッドの使用を提案しています。ただし、この記事は別の/より複雑なシナリオに関するものであり、あまり役に立ちませんでした。

ありがとう:Matti

PS。私もこの質問をしました データベースのスレッドを生成する正しい方法は何ですかIO asmx Webサービス? これは複数の質問で複雑すぎました。

23
char m

このようなもの:

_public delegate void Worker();
private static Thread worker;

public static void Init(Worker work)
{
    worker = new Thread(new ThreadStart(work));
    worker.Start();
}

public static void Work()
{
    // do stuff
}
_

次に、Init(Work)を呼び出して物事を始めます。

BeginInvoke()またはThreadPool.QueueUserWorkItem()を呼び出すと、ASP.NETスレッドプールスレッドが使用され、アプリケーションのスケーラビリティに影響を与える可能性があります。

役立つ場合は、コード例、サンプルベンチマークなどとともに、これらの問題について詳しく説明します。 ltra-Fast ASP.NET

30
RickNZ

を見てみましょう:

http://www.codeproject.com/KB/cs/AsyncMethodInvocation.aspx?fid=326357&df=90&mpp=25&noise=3&sort=Position&view=Quick

次のようなことができます:

 public delegate void MethodInvoker();

    private void Foo()
    {
        // sleep for 10 seconds.
        Thread.Sleep(10000);
    }

protected void Button2_Click(object sender, EventArgs e)
{
    // create a delegate of MethodInvoker poiting to
    // our Foo function.
    MethodInvoker simpleDelegate = new MethodInvoker(Foo);

    // Calling Foo Async
   simpleDelegate.BeginInvoke(null, null);

}
5
SirMoreno