有一个代码可以读取文件,并使用类Task
和StreamReader
在另一个线程中对其内容进行一些计算操作。
Task t= new Task(() => DoSomeWork(myFile));
t.Start();
但是,尽管文件是不可变的,但有时我会得到不同的结果!为什么?我该怎么做才能解决它?
答案 0 :(得分:1)
你显然在DoSomeWork()中有一些不是线程安全的东西。最可能的候选者是一些静态代码,因为这意味着内存中只有一个特定代码段的副本。 DoSomeWork()的一个实例可以将上下文切换出来,然后另一个实例将获取静态方法的状态,从而为您提供一些不可预测的结果。
其他一些事情可能包括不正当使用依赖注入,一个单独的对象被共享,某些库被不正当地用作异步,或者其他一些东西 - 这就是Drew在询问更多信息时所谈论的内容。 p>
答案 1 :(得分:0)
我可以看到的一个问题是,如果有多个单词匹配,则第一次遇到每个新单词时,您将重新创建整个GridView
。我建议在进入循环之前创建GridView
以处理单词...如果不是在设计时让GridView在ListView's
定义中保持静态。
也就是说,这更像是一个性能问题(不断重置视图)而不是数据问题。如果您可以发布FileWordInfo
视图模型类实现,它可能会揭示其他一些问题。