나는 작동하는 응용 프로그램을 가지고 있으며 반복되는 반복 횟수의 루프가 있습니다. 이 루프에는 하나의 함수 호출이 있습니다. 그런 다음 함수를 별도의 스레드로 실행하도록 프로그램을 변경하려고했습니다. 나는 단위 테스트를 실행하도록 설정하고 응용 프로그램은 작업을 완료하기 전에 실행을 중지합니다.C# TPL 응용 프로그램의 실행이 중지됩니다.
하나의 스레드에서 하나의 반복 및 디버그를하도록 루프를 설정했습니다. 이 함수는 항상 같은 줄에있는 것이 아니라 함수의 상단 근처에서 실행을 멈추지 만 데이터 테이블과 데이터 행이있는 개체의 복사본을 만들려는 동일한 영역에서 각 스레드에서 선택 항목을 변경할 수 있습니다. 다음 코드는이 영역에서 디버깅 할 때 일관되게 멈추지 만 도착한 행은 다양합니다.
// 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;
}
진입 점은 어떻게 생겼습니까? 내 생각 엔이 응용 프로그램은 엔트리 포인트 코드가 완료되는 즉시 종료되는 콘솔 앱입니다. 그러나 그것은 코드를 보지 않고 그냥 추측입니다. –