有讀取一個文件,並提出了一些計算操作,其使用的類Task
和StreamReader
另一個線程內容的代碼。類任務的C#和不同的結果
Task t= new Task(() => DoSomeWork(myFile));
t.Start();
但該文件的inspite是不可改變的,有時我得到不同結果!爲什麼?我該怎麼做才能解決它?
有讀取一個文件,並提出了一些計算操作,其使用的類Task
和StreamReader
另一個線程內容的代碼。類任務的C#和不同的結果
Task t= new Task(() => DoSomeWork(myFile));
t.Start();
但該文件的inspite是不可改變的,有時我得到不同結果!爲什麼?我該怎麼做才能解決它?
你已經清楚地知道DoSomeWork()內部不是線程安全的。最可能的候選對象是一些靜態代碼,因爲這意味着內存中的特定代碼只有一個副本。 DoSomeWork()的一個實例可以將上下文切換出來,然後另一個實例將接受靜態方法的狀態,給你一些不可預知的結果。
其他的事情可能包括依賴注入的不當使用,共享單例對象,某些庫被錯誤地用作異步,或者其他一些事情 - 這是德魯在詢問更多信息時所談論的內容。
的一個問題,我可以看到蝙蝠是,如果有多個字比賽,你第一次遇到每一個新詞你重新創建整個GridView
。我建議在進入循環之前創建GridView
以處理單詞......如果不是在設計時讓GridView在ListView's
定義中靜態化。
這就是說,這更是一個性能問題(不斷重置視圖)比與所述數據中的問題。如果你可以發佈你的FileWordInfo
視圖模型類實現它可能會揭示一些其他問題。
您確實需要提供有關DoSomeWork實施的更多詳細信息,以便我們能夠提供幫助。 – 2012-04-01 16:57:10
如果您還可以解釋每次結果如何「不同」,這將幫助人們更輕鬆地找出問題的原因。 – 2012-04-01 17:16:51
有時會顯示指定單詞的「頻率」列中的不同結果。 – 2012-04-01 17:23:13