私はスレッドとParallel.Foreach
で特別な設定を持っています:別スレッドでParallel.Foreach
ループが実行されます。関数Abort()
を呼び出すことによってThread
が中止されることがあります。私は奇妙な行動を得る:複数回ThreadAbortException
がスローされます。誰かがここで何が起きているのか、何が良い解決策になるのか説明できますか?スレッドを中止する際の別のスレッドの動作
システム:以下
- のVisual Studio 2017
- C#7.0
- の.Net 4.6.1
コード。
static void Main(string[] args)
{
//Start the new Thread
Thread workerThread = new Thread(Program.TestVoid);
workerThread.Name = "My WorkerThread";
workerThread.Start();
//wait
Thread.Sleep(1000);
//abort thread
workerThread.Abort();
}
public static void TestVoid()
{
bool[] liBools = new bool[10000];
Parallel.For(0, liBools.Length, idx =>
{
liBools[idx] = idx == 9998;
});
try
{
Parallel.ForEach(liBools, myBool =>
{
try
{
//do something
Thread.Sleep(1000);
}
catch (Exception ex) //Thread Abort Exception get caught
{
}
});
}
catch (OperationCanceledException ex)
{
}
catch (ThreadAbortException ex) //Thread Abort Exception get caught
{
} //here arises another ThreadAbortException
finally
{
source.Dispose();
}
string s = "ready";
}