0

我有一个正在运行的应用程序,并且有一个迭代次数可变的循环。我在这个循环中有一个函数调用。然后我尝试更改程序以将函数作为单独的线程启动。我设置了要运行的单元测试,并且应用程序在完成任何工作之前停止运行。

我已将循环设置为在一个线程上进行一次迭代和调试。它在函数顶部附近停止运行,并不总是在同一行,而是在我尝试复制具有数据表和数据行的对象副本的同一区域,在每个线程中可以更改选择。以下是代码,在该区域进行调试时它会一直停止,但到达的行会有所不同。

// 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;
}
4

1 回答 1

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());
于 2013-07-10T15:06:24.733 回答