我有一个正在运行的应用程序,并且循环具有可变数量的迭代。我在这个循环中有一个函数调用。然后我尝试更改程序以将该函数作为单独的线程启动。我设置了一个单元测试来运行,并且在完成任何工作之前应用程序停止运行。
我已经将循环设置为在一个线程上进行一次迭代和调试。它停止在函数顶部附近运行,并不总是在同一行上,而是在我尝试复制具有数据表和数据行的对象的同一区域,其中可以在每个线程中更改选择。以下是代码,它在此区域中调试时始终停止,但到达的行会有所不同。
// 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;
}
答案 0 :(得分:2)
您创建的要完成的任务似乎不是Wait
:您必须调用Wait
方法或访问通用任务的Result
属性来阻止调用线程直到工作完成,请尝试以下操作:
var tasks = new List<Task>();
for ...
{
Task compute = Task.Factory.StartNew(() => results.Add(Compute(originalObject)));
tasks.Add(compute);
}
Task.WaitAll(tasks.ToArray());