Добавьте статический конструктор и новый AOTHint()
статический метод к классу, который содержит метод Processqueue()
. В AOTHint()
создайте свежий экземпляр определенного универсального класса, с которым у вас проблемы, и вызовите метод, с которым у него проблемы.
static MyClass() {
AOTHint();
}
static void AOTHint()
{
// @fixes: ExecutionEngineException: Attempting to JIT compile method 'System.Collections.Generic.Dictionary`1.FirstOrDefault ()' while running with --aot-only.
(new Dictionary<string, QueueItem>()).FirstOrDefault();
}
Примечание. Я не пробовал запускать ваш конкретный код с вышеуказанным в MonoTouch; Это адаптированное решение из того, что я использовал несколько раз прежде для решения проблемы «Попытка JIT-компиляции». Если это не сработает, вам, вероятно, придется поиграть с типами, указанными и названными в AOTHint()
.
Сделайте это для каждого класса, у которого есть методы задачи, для каждого из типов проблем, и ваши заботы исчезнут в промежутке времени между настоящим моментом и всякий раз, когда Mono выясняет, как сделать их общую компиляцию менее глючной.
Это работает благодаря тому, что компилятор AOT точно знает, что вам нужно, при минимальных затратах расточительно создавая несколько пустых универсальных объектов и вызывая для них несколько методов LINQ во время запуска приложения.