2011-07-28 11 views
3

複数のスレッドを高速に終了するプロシージャを作成する必要があります。私の考えは、キャンセルする必要があるすべてのスレッドを新しいAppDomainに移動し、そのようなスレッドをすべて中止してからAppDomainをアンロードすることです。AppDomains間でワーカースレッドを移動することは可能です

これは可能ですか?

+2

アボートしたいスレッドが分かっている場合は、そのAppDomainダンスを試みないでアボートしてみてください。 –

+0

@Annaと同意する - どのスレッドを中止する必要があるか知っていれば、なぜそれらを中止しないのですか? –

答えて

3

アプリドメイン間でスレッドを移動することはできません。オブジェクトは実際にはそれらの間を移動しません。

Moving objects across AppDomains in .NETを参照してください。

スレッドオブジェクトを自分で処理し、必要に応じて取り消すだけでいいと思います。

+0

私はリンクhttp://en.csharp-online.net/Building_Multithreaded_Applicationsを見つけました。次のページでは、次のように書いています。「アクティブなスレッドはAppDomain境界の間で移動できますが、任意のスレッドは任意の点つまり、1つのスレッドが複数のAppDomainで作業を行うことは不可能です。 「CLRは、スレッドをアプリケーションドメインとコンテキストに移動させることを担うエンティティです」。 – walter

+0

私はいくつかの明確さを含めるべきだと思います: 'スレッド'オブジェクトは移動できません。ランタイムは、 'Thread'オブジェクトが表す基底のスレッドで望みどおりに行うことができます。 – Travis

1

スレッドを中止することは悪い考えです。協調取消の実施を検討する。それが.Net 4 hereでどのように行われたかを見てください。

どれ非同期技術はキャンセルの対象には全く知らないキャッチされ、簡単にデータの安全性を確保することができないという共通の特徴を持っています。ここ はその記事からの引用です。多くの理由がありますが、特に共有データに対する部分的な更新のリスクがあるため、非同期技術の使用は強く推奨されません。

関連する問題