2

私は現在.netc#4.0で作業していますが、自分が書いたコードで問題が発生し、頭痛の種になっています。

System.Threading.Tasks.TaskFactoryクラスをSystem.Threading.Tasks.TaskSchedulerと組み合わせて使用​​して、コンソールアプリケーションで新しいスレッドを開始します。このスレッドの機能は、アイテムがキューに追加されているかどうかを確認することです。アイテムがキューに追加されると、それが処理されます。

したがって、キューには送信される電子メールが含まれ、電子メールがキューに追加されると、電子メールは複数のクライアントを介して送信されます。それぞれへの送信は並行して行われます。

この断続的な問題が発生し、新しいスレッドで次の例外が発生することがあります。

[System.Threading.ThreadAbortException] = {コードが最適化されているか、ネイティブフレームが呼び出しスタックの最上位にあるため、式を評価できません。}

デバッグ時に、スタック内のすべてのプロパティに「コードが最適化されているか、ネイティブフレームが呼び出しスタックの上にあるため、式を評価できません」と表示されているため、これ以上の情報を取得できません。

インターネットで解決策を探していると、これはresponse.redirectを実行するときに発生する問題であることがわかりましたが、コードではこれを実行していません。デバッグしようとすると、このエラーが発生する場所に一貫性がありません。以下は、ファクトリを作成して新しいスレッドを開始するために使用するコードです。

    this.taskFactory = new TaskFactory(TaskScheduler.Current);
    this.taskFactory.StartNew(this.DequeueMessage, state, TaskCreationOptions.LongRunning);

なぜこのエラーが発生するのかについてのポインタと、それを修正する方法についてのヒントはありますか?

4

1 に答える 1

3

を取得する唯一の理由は、スレッドで呼び出されたThreadAbortExceptionためです。Thread.Abortこれを手動で行っていない場合、これはクライアントアプリケーションで終了時に発生する可能性があります。物事がリサイクルされるときに、ホストされた環境でも発生します。より詳細に提供すると、より具体的な回答が提供される可能性があります。

于 2012-07-17T18:02:59.050 に答える