Multithreading C#中的课堂任务和不同的结果

Multithreading C#中的课堂任务和不同的结果,multithreading,c#-4.0,task-parallel-library,Multithreading,C# 4.0,Task Parallel Library,有一个代码可以读取一个文件,并使用类Task和StreamReader在另一个线程中对其内容进行一些计算操作 Task t= new Task(() => DoSomeWork(myFile)); t.Start(); 但尽管文件是不可变的,有时我得到的结果却不同!为什么?我应该怎么做才能解决它?很明显,DoSomeWork()中有一些线程不安全的东西。最有可能出现这种情况的是一些静态代码,因为这意味着内存中只有该特定代码段的一个副本。DoSomeWork()的一个实例可能会切换出上

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

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

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

很明显,DoSomeWork()中有一些线程不安全的东西。最有可能出现这种情况的是一些静态代码,因为这意味着内存中只有该特定代码段的一个副本。DoSomeWork()的一个实例可能会切换出上下文,而另一个实例则会了解静态方法的状态,从而产生一些不可预测的结果


其他事情可能包括不正确地使用依赖项注入、正在共享的单例对象、某些库被不正确地用作异步对象,或者其他一些事情-这就是Drew在询问更多信息时所说的。

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


也就是说,这更多的是性能问题(不断重置视图),而不是数据问题。如果您可以发布您的
FileWordInfo
查看模型类实现,则可能会暴露出一些其他问题。

您确实需要提供有关DoSomeWork实现的更多详细信息,以便我们能够提供帮助。如果您还可以解释结果如何“不同”每一次都可以帮助人们更容易地找出问题所在。有时,它会在指定单词的“频率”栏中显示不同的结果。还有一个问题:人们是否可能同时调用DoSomething本身?也就是说,DoSomething可以同时运行两个任务吗?实际上,还有一个任务:您可以发布您的FileWordInfo视图模型类吗?