2012-08-14 5 views
5

Monotouch advertises Unterstützung für AsParallel auf ihrer Website mit diesem Code-Schnipsel Absturz:AsParallel eine Monotouch App

from item in items.AsParallel() 
    let result = DoExpensiveWork (item) 
    select result; 

Doch selbst eine triviale Probe stürzt meine App:

var items = new [] { 1, 2, 3 }; 
var twice = (
     from x in items.AsParallel() 
     select 2 * x 
    ).ToArray(); 

System.ExecutionEngineException has been thrown. Attempting to JIT compile method 'System.Linq.Parallel.QueryNodes.WrapHelper:<Wrap<code>1>m__4A<int>(System.Collections.Generic.IEnumerator</code>1<int>)' while running with --aot-only.

Ich weiß, MonoTouch kann nicht mit virtuellen generischen Methoden umgehen, aber sollte PLINQ nicht funktionieren?
Was ist es falsch, dass ich mache?

MonoTouch-Version ist 5.3.5.

Das Gleiche gilt für Parallel.ForEach:

System.AggregateException: One or more errors occured ---> System.Exception: 
Attempting to JIT compile method 'System.Threading.Tasks.Parallel:<ForEach`1>m__36<int>()' while running with --aot-only. 
See http://docs.xamarin.com/ios/about/limitations for more information. 
+0

@James: AFAIK --aot-only ist der einzige Modus, der auf dem echten iOS-Gerät möglich ist, da JIT von Apple verboten ist. –

+0

Dies ist wahrscheinlich ein Fehler, Bericht hier, und fügen Sie ein schnelles Projekt, um es zu reproduzieren: http://bugzilla.xamarin.com – jonathanpeppers

Antwort

4

This is a known limitation with MonoTouch and generics - in diesem Fall ist es, weil Sie mit Strukturen arbeiten sind.

Es sollte funktionieren, wenn Sie Objekte verwenden statt:

var items = new object [] { 1, 2, 3 }; 
var twice = (
    from x in items.AsParallel() 
    select 2 * x 
).ToArray(); 

Wir arbeiten einige dieser Einschränkungen auf Festsetzung, so dass es wäre schön, wenn Sie uns einen Fehlerbericht mit einem Beispielprojekt-Datei könnte zu Schauen Sie, ob es möglich ist, diesen Fall am Tag zu beheben.

+1

Danke für die Antwort. Ich verstehe jetzt die Strukturen waren schuld. –