2012-04-01 4 views
0

Существует код, который читает файл и выполняет некоторые вычисления с его содержимым в другом потоке с использованием классов Task и StreamReader.Задача класса в C# и различные результаты

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

Но несмотря файла неизменен иногда я получаю различные результаты! Зачем? Что делать, чтобы разрешить это?

+0

Вам действительно нужно предоставить более подробную информацию о внедрении DoSomeWork, чтобы мы могли помочь. –

+1

Если вы также можете объяснить, как результаты «разные» каждый раз, что поможет людям легче определить проблему. –

+0

Иногда он показывает разный результат в столбце «Частота» для указанного слова. –

ответ

2

У вас явно есть что-то внутри DoSomeWork(), которое не является потокобезопасным. Наиболее вероятным кандидатом для этого является некоторый статический код, поскольку это будет означать, что в памяти есть только одна копия этого конкретного фрагмента кода. Один экземпляр DoSomeWork() может отключить контекст, а другой экземпляр затем подберет состояние статического метода, что даст вам непредсказуемые результаты.

Другие вещи могут включать неправильное использование инъекции зависимостей, одноэлементный объект, который используется совместно, некоторые библиотеки неправильно используются как асинхронные, или пара других вещей - об этом говорил Дрю, когда он попросил дополнительную информацию.

1

Одна проблема, которую я могу видеть с места в карьер, если есть несколько совпадений слов, в первый раз, когда вы сталкиваетесь с каждым новым словом, вы воссоздаете весь GridView. Я бы порекомендовал создать GridView перед входом в цикл для обработки слов ... если не только статический GridView в определении ListView's во время разработки.

Это, скорее всего, проблема производительности (постоянный сброс представления), чем проблема с данными. Если вы можете опубликовать свою модель класса модели FileWordInfo, она может раскрыть некоторые другие проблемы.

Смежные вопросы