В настоящее время работает над многопоточным приложением WP 7.1.1 и немногим более половины случаев, когда приложение завершает работу на «начальной фазе» без выдачи каких-либо исключений. Он просто заканчивается тем, что все потоки возвращают 0x0 и не вводят никаких событий закрытия / выхода / выхода.
...
The thread '<No Name>' (0xfde00d2) has exited with code 0 (0x0).
The thread '<No Name>' (0xe860116) has exited with code 0 (0x0).
The thread '<No Name>' (0xfdf00c6) has exited with code 0 (0x0).
The thread '<No Name>' (0xf8d012e) has exited with code 0 (0x0).
The thread '<No Name>' (0xfd5010e) has exited with code 0 (0x0).
The thread '<No Name>' (0xfbc011a) has exited with code 0 (0x0).
The thread '<No Name>' (0xf9900ee) has exited with code 0 (0x0).
The program '[268042506] UI Task: Managed' has exited with code 0 (0x0).
EOL
Что именно означает «начальная фаза»? Я профилировал приложение с помощью «Анализ производительности Windows Phone», и вместе с некоторыми отладочными сообщениями и некоторыми журналами, по моим оценкам, это происходит примерно через 3-4 секунды после запуска. В этот момент графический интерфейс пользователя уже виден на очень короткое время.
Я почти уверен, что проблема возникает из-за следующего звонка:
private static List<MyEntries> EntriesLoad()
{
using(var context = Context.ReadOnly) // <- works
{
return context.MyEntries.Where(m => !m.Deleted).OrderBy(m => m.Name).ToList(); // <- problem
}
}
private async void EntriesReload()
{
EntriesLoaded = false; // <- called
var entries = await TaskEx.Run<List<MyEntries>>(EntriesLoad); // <- called
EntriesLoaded = true; // <- only get's called 50% of the time/ otherwise app quits
}
Чтобы предотвратить любые проблемы многопоточности с DataContext, при каждом вызове создается новый контекст:
public static Context ReadOnly
{
get { return new Context(ConnectionReadOnly); }
}
Я даже попробовал BackgroundWorker и ThreadPool вместо Async CTP 3, но с тем же эффектом. Я знаю, что задавались очень похожие вопросы многие раз до, но я просто не смог найти решение своей проблемы. Есть ли способ / программа, с помощью которой я мог бы найти точный метод (причину, место), вызывающий исключение? Есть ли ограничения на количество создаваемых потоков? Можно ли таким образом безопасно использовать DataContext?
Ваша помощь очень ценится.