2012-08-14 6 views
5

MonoTouch advertisesAsParallel के लिए समर्थन दुर्घटनाग्रस्त:AsParallel एक MonoTouch एप्लिकेशन इस कोड स्निपेट के साथ अपनी वेबसाइट पर

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.

:

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

हालांकि, यहां तक ​​कि एक तुच्छ नमूना मेरी अनुप्रयोग क्रैश मुझे पता है कि मोनो टच वर्चुअल जेनेरिक तरीकों को संभाल नहीं सकता है लेकिन क्या PLINQ काम करना चाहिए?
यह क्या गलत है कि मैं कर रहा हूं?

मोनो टच संस्करण 5.3.5 है।

ही 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

@ जेम्स: AFAIK - वास्तविक आईओएस डिवाइस पर केवल एकमात्र तरीका संभव है क्योंकि जेआईटी को ऐप्पल द्वारा प्रतिबंधित किया गया है। –

+0

यह शायद एक बग है, यहां रिपोर्ट करें, और इसे पुन: उत्पन्न करने के लिए एक त्वरित परियोजना संलग्न करें: http://bugzilla.xamarin.com – jonathanpeppers

उत्तर

4

This is a known limitation with MonoTouch and generics - इस मामले में यह है क्योंकि आप संरचनाओं के साथ काम कर रहे हैं।

अगर आप वस्तुओं के बजाय का उपयोग यह काम करना चाहिए:

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

हम इन सीमाओं में से कुछ ठीक कर रहे हैं, तो यह अच्छा होगा अगर आप हमें के लिए एक नमूना परियोजना के लिए के साथ एक बग रिपोर्ट फ़ाइल सकता है यह देखने के लिए एक नज़र डालें कि वास्तव में दिन में इस मामले को ठीक करना संभव है या नहीं।

+1

उत्तर के लिए धन्यवाद। मैं समझता हूं कि संरचनाओं को दोष देना था। –

संबंधित मुद्दे