Thread.Abort メソッド
定義
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
スレッドが呼び出されたスレッドで ThreadAbortException を発生させ、スレッドを終了するプロセスを開始します。 通常、このメソッドを呼び出すとスレッドが終了します。
オーバーロード
| 名前 | 説明 |
|---|---|
| Abort() |
古い.
スレッドが呼び出されたスレッドで ThreadAbortException を発生させ、スレッドを終了するプロセスを開始します。 通常、このメソッドを呼び出すとスレッドが終了します。 |
| Abort(Object) |
古い.
スレッドが呼び出されたスレッドで ThreadAbortException を発生させ、スレッド終了に関する例外情報も提供しながら、スレッドを終了するプロセスを開始します。 通常、このメソッドを呼び出すとスレッドが終了します。 |
注釈
Important
Thread.Abortメソッドは注意して使用してください。 特に、現在のスレッド以外のスレッドを中止するために呼び出すと、 ThreadAbortException がスローされたときに実行されたコードや実行に失敗したコードがわからない。 また、アプリケーションの状態や、アプリケーションが保持する責任を負うユーザーの状態についても確信を持てません。 たとえば、 Thread.Abort を呼び出すと、静的コンストラクターの実行や、マネージド リソースまたはアンマネージド リソースの解放が妨げになる場合があります。
Abort()
- ソース:
- Thread.cs
- ソース:
- Thread.cs
- ソース:
- Thread.cs
- ソース:
- Thread.cs
- ソース:
- Thread.cs
注意事項
Thread.Abort is not supported and throws PlatformNotSupportedException.
スレッドが呼び出されたスレッドで ThreadAbortException を発生させ、スレッドを終了するプロセスを開始します。 通常、このメソッドを呼び出すとスレッドが終了します。
public:
void Abort();
[System.Obsolete("Thread.Abort is not supported and throws PlatformNotSupportedException.", DiagnosticId="SYSLIB0006", UrlFormat="https://aka.ms/dotnet-warnings/{0}")]
public void Abort();
public void Abort();
[<System.Obsolete("Thread.Abort is not supported and throws PlatformNotSupportedException.", DiagnosticId="SYSLIB0006", UrlFormat="https://aka.ms/dotnet-warnings/{0}")>]
member this.Abort : unit -> unit
member this.Abort : unit -> unit
Public Sub Abort ()
- 属性
例外
.NET Core と .NET 5 以降のみ: すべての場合。
呼び出し元に必要なアクセス許可がありません。
中止中のスレッドは現在中断されています。
注釈
このメソッドは廃止されています。 .NET 5 以降のバージョンでは、このメソッドを呼び出すとコンパイル時の警告が生成されます。 このメソッドは、実行時に .NET 5 以降および .NET Core で PlatformNotSupportedException をスローします。
このメソッドがスレッドで呼び出されると、システムはスレッドで ThreadAbortException をスローして中止します。
ThreadAbortExceptionは、アプリケーション コードでキャッチできる特別な例外ですが、ResetAbortが呼び出されない限り、catch ブロックの最後に再スローされます。
ResetAbort は中止要求を取り消し、 ThreadAbortException がスレッドを終了するのを防ぎます。 実行されていない finally ブロックは、スレッドが中止される前に実行されます。
注
スレッドがそれ自体で Abort を呼び出すと、その影響は例外のスローに似ています。 ThreadAbortException はすぐに発生し、結果は予測可能です。 ただし、あるスレッドが別のスレッドで Abort 呼び出した場合、中止は実行中のコードを中断します。 静的コンストラクターが中止される可能性もあります。 まれに、そのクラスのインスタンスがそのアプリケーション ドメインに作成されない場合があります。
スレッドが直ちに中止されるとは限りません。また、まったく中止されるわけではありません。 この状況は、中止プロシージャの一部として呼び出される finally ブロックでスレッドが無制限の計算を行い、中止を無期限に遅らせる場合に発生する可能性があります。 スレッドが中止されるまで待機するには、Abort メソッドを呼び出した後、スレッドで Join メソッドを呼び出すことができますが、待機が終了する保証はありません。
注
Abortを呼び出すスレッドは、中止されるスレッドが、catch ブロック、finally ブロック、制約付き実行領域など、コードの保護された領域にある場合にブロックする可能性があります。
Abortを呼び出すスレッドが、中止されたスレッドに必要なロックを保持している場合は、デッドロックが発生する可能性があります。
開始されていないスレッドで Abort が呼び出されると、 Start が呼び出されたときにスレッドが中止されます。 ブロックされているスレッドまたはスリープ状態のスレッドで Abort が呼び出された場合、スレッドは中断され、中止されます。
中断されたスレッドでAbortが呼び出されると、Abortを呼び出したスレッドでThreadStateExceptionがスローされ、中止されるスレッドのThreadState プロパティにAbortRequestedが追加されます。
Resumeが呼び出されるまで、ThreadAbortExceptionは中断されたスレッドでスローされません。
アンマネージ コードの実行中にマネージド スレッドで Abort が呼び出された場合、スレッドがマネージド コードに戻るまで、 ThreadAbortException はスローされません。
Abortに対する 2 回の呼び出しが同時に行われる場合、1 つの呼び出しで状態情報を設定し、もう 1 つの呼び出しでAbortを実行できます。 ただし、アプリケーションはこの状況を検出できません。
スレッドで Abort が呼び出されると、スレッドの状態に AbortRequestedが含まれます。
Abortの正常な呼び出しの結果としてスレッドが終了すると、スレッドの状態がStoppedに変更されます。 十分なアクセス許可により、 Abort のターゲットであるスレッドは、 ResetAbort メソッドを使用して中止を取り消すことができます。
ResetAbort メソッドの呼び出しを示す例については、ThreadAbortException クラスを参照してください。
こちらもご覧ください
適用対象
Abort(Object)
- ソース:
- Thread.cs
- ソース:
- Thread.cs
- ソース:
- Thread.cs
- ソース:
- Thread.cs
- ソース:
- Thread.cs
注意事項
Thread.Abort is not supported and throws PlatformNotSupportedException.
スレッドが呼び出されたスレッドで ThreadAbortException を発生させ、スレッド終了に関する例外情報も提供しながら、スレッドを終了するプロセスを開始します。 通常、このメソッドを呼び出すとスレッドが終了します。
public:
void Abort(System::Object ^ stateInfo);
[System.Obsolete("Thread.Abort is not supported and throws PlatformNotSupportedException.", DiagnosticId="SYSLIB0006", UrlFormat="https://aka.ms/dotnet-warnings/{0}")]
public void Abort(object? stateInfo);
public void Abort(object stateInfo);
public void Abort(object? stateInfo);
[<System.Obsolete("Thread.Abort is not supported and throws PlatformNotSupportedException.", DiagnosticId="SYSLIB0006", UrlFormat="https://aka.ms/dotnet-warnings/{0}")>]
member this.Abort : obj -> unit
member this.Abort : obj -> unit
Public Sub Abort (stateInfo As Object)
パラメーター
- stateInfo
- Object
中止中のスレッドが使用できる状態など、アプリケーション固有の情報を含むオブジェクト。
- 属性
例外
.NET Core と .NET 5 以降のみ: すべての場合。
呼び出し元に必要なアクセス許可がありません。
中止中のスレッドは現在中断されています。
例
次のコード例は、中止されているスレッドに情報を渡す方法を示しています。
using System;
using System.Threading;
class Test
{
public static void Main()
{
Thread newThread = new Thread(new ThreadStart(TestMethod));
newThread.Start();
Thread.Sleep(1000);
// Abort newThread.
Console.WriteLine("Main aborting new thread.");
newThread.Abort("Information from Main.");
// Wait for the thread to terminate.
newThread.Join();
Console.WriteLine("New thread terminated - Main exiting.");
}
static void TestMethod()
{
try
{
while(true)
{
Console.WriteLine("New thread running.");
Thread.Sleep(1000);
}
}
catch(ThreadAbortException abortException)
{
Console.WriteLine((string)abortException.ExceptionState);
}
}
}
open System.Threading
let testMethod () =
try
while true do
printfn "New thread running."
Thread.Sleep 1000
with :? ThreadAbortException as abortException ->
printfn $"{abortException.ExceptionState :?> string}"
let newThread = Thread testMethod
newThread.Start()
Thread.Sleep 1000
// Abort newThread.
printfn "Main aborting new thread."
newThread.Abort "Information from Main."
// Wait for the thread to terminate.
newThread.Join()
printfn "New thread terminated - Main exiting."
Imports System.Threading
Public Class Test
<MTAThread> _
Shared Sub Main()
Dim newThread As New Thread(AddressOf TestMethod)
newThread.Start()
Thread.Sleep(1000)
' Abort newThread.
Console.WriteLine("Main aborting new thread.")
newThread.Abort("Information from Main.")
' Wait for the thread to terminate.
newThread.Join()
Console.WriteLine("New thread terminated - Main exiting.")
End Sub
Shared Sub TestMethod()
Try
While True
Console.WriteLine("New thread running.")
Thread.Sleep(1000)
End While
Catch abortException As ThreadAbortException
Console.WriteLine( _
CType(abortException.ExceptionState, String))
End Try
End Sub
End Class
注釈
このメソッドは廃止されています。 .NET 5 以降のバージョンでは、このメソッドを呼び出すとコンパイル時の警告が生成されます。 このメソッドは、実行時に .NET 5 以降および .NET Core で PlatformNotSupportedException をスローします。
このメソッドがスレッドで呼び出されると、システムはスレッドで ThreadAbortException をスローして中止します。
ThreadAbortExceptionは、アプリケーション コードでキャッチできる特別な例外ですが、ResetAbortが呼び出されない限り、catch ブロックの最後に再スローされます。
ResetAbort は中止要求を取り消し、 ThreadAbortException がスレッドを終了するのを防ぎます。 実行されていない finally ブロックは、スレッドが中止される前に実行されます。
注
スレッドがそれ自体で Abort を呼び出すと、その影響は例外のスローに似ています。 ThreadAbortException はすぐに発生し、結果は予測可能です。 ただし、あるスレッドが別のスレッドで Abort 呼び出した場合、中止は実行中のコードを中断します。 静的コンストラクターが中止される可能性があります。 まれに、そのクラスのインスタンスがそのアプリケーション ドメインに作成されない場合があります。
スレッドが直ちに中止されるとは限りません。また、まったく中止されるわけではありません。 この状況は、中止プロシージャの一部として呼び出される finally ブロックでスレッドが無制限の計算を行い、中止を無期限に遅らせる場合に発生する可能性があります。 スレッドが中止されるまで待機するには、Abort メソッドを呼び出した後にスレッドで Join メソッドを呼び出すことができますが、待機が終了する保証はありません。
注
Abortを呼び出すスレッドは、中止されるスレッドが、catch ブロック、finally ブロック、制約付き実行領域など、コードの保護された領域にある場合にブロックする可能性があります。
Abortを呼び出すスレッドが、中止されたスレッドに必要なロックを保持している場合は、デッドロックが発生する可能性があります。
開始されていないスレッドで Abort が呼び出されると、 Start が呼び出されたときにスレッドが中止されます。 ブロックされているスレッドまたはスリープ状態のスレッドで Abort が呼び出された場合、スレッドは中断され、中止されます。
中断されたスレッドでAbortが呼び出されると、Abortを呼び出したスレッドでThreadStateExceptionがスローされ、中止されるスレッドのThreadState プロパティにAbortRequestedが追加されます。
Resumeが呼び出されるまで、ThreadAbortExceptionは中断されたスレッドでスローされません。
アンマネージ コードの実行中にマネージド スレッドで Abort が呼び出された場合、スレッドがマネージド コードに戻るまで、 ThreadAbortException はスローされません。
Abortに対する 2 回の呼び出しが同時に行われる場合、1 つの呼び出しで状態情報を設定し、もう 1 つの呼び出しでAbortを実行できます。 ただし、アプリケーションはこの状況を検出できません。
スレッドで Abort が呼び出されると、スレッドの状態に AbortRequestedが含まれます。
Abortの正常な呼び出しの結果としてスレッドが終了すると、スレッドの状態がStoppedに変更されます。 十分なアクセス許可により、 Abort のターゲットであるスレッドは、 ResetAbort メソッドを使用して中止を取り消すことができます。
ResetAbort メソッドの呼び出しを示す例については、ThreadAbortException クラスを参照してください。