動作しているアプリケーションがあり、反復回数が可変のループがあります。このループには関数呼び出しが 1 つあります。次に、関数を別のスレッドとして起動するようにプログラムを変更しようとしました。実行する単体テストをセットアップしましたが、作業が完了する前にアプリケーションの実行が停止しました。
1 つのスレッドで 1 つの反復とデバッグを行うようにループを設定しました。常に同じ行ではなく、各スレッドで選択を変更できるデータテーブルとデータ行を持つオブジェクトのコピーを作成しようとする同じ領域で、関数の上部近くで実行が停止します。以下はコードで、この領域でデバッグすると一貫して停止しますが、到達する行は異なります。
// main thread called by unit test
...
for(...
{
Task compute = Task.Factory.StartNew(() => results.Add(Compute(originalObject)));
}
...
private ReturnObject Compute(MyObject originalObject)
{
...
// near top of function after some assignment statements
// of some string and boolean variables
MyObject myObject = originalObject.Copy;
// never makes it to the next line
...
}
// MyObject class
private MyObject(DataTable dtTable)
{
_dataService = new DataService();
_dataTable = dtTable.Copy();
_dataRows = _dataTable.Select();
}
public MyObject Copy()
{
MyObject copy = new MyObject(_dtTable);
return copy;
}
// DataService class
public DataService()
{
_oleDbConnection = null;
}