C#中的类任务和不同的结果

时间:2012-04-01 16:49:51

标签: multithreading c#-4.0 task-parallel-library

有一个代码可以读取文件,并使用类TaskStreamReader在另一个线程中对其内容进行一些计算操作。

 Task t= new Task(() => DoSomeWork(myFile));
 t.Start();

但是,尽管文件是不可变的,但有时我会得到不同的结果!为什么?我该怎么做才能解决它?

2 个答案:

答案 0 :(得分:1)

你显然在DoSomeWork()中有一些不是线程安全的东西。最可能的候选者是一些静态代码,因为这意味着内存中只有一个特定代码段的副本。 DoSomeWork()的一个实例可以将上下文切换出来,然后另一个实例将获取静态方法的状态,从而为您提供一些不可预测的结果。

其他一些事情可能包括不正当使用依赖注入,一个单独的对象被共享,某些库被不正当地用作异步,或者其他一些东西 - 这就是Drew在询问更多信息时所谈论的内容。 p>

答案 1 :(得分:0)

我可以看到的一个问题是,如果有多个单词匹配,则第一次遇到每个新单词时,您将重新创建整个GridView。我建议在进入循环之前创建GridView以处理单词...如果不是在设计时让GridView在ListView's定义中保持静态。

也就是说,这更像是一个性能问题(不断重置视图)而不是数据问题。如果您可以发布FileWordInfo视图模型类实现,它可能会揭示其他一些问题。