2012-08-14 21 views
5

MonoTouch advertises hỗ trợ cho AsParallel trên website của mình với đoạn mã này:AsParallel đâm một ứng dụng MonoTouch

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

Tuy nhiên, thậm chí là một mẫu tầm thường treo ứng dụng của tôi:

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.

Tôi biết MonoTouch không thể xử lý các phương pháp chung ảo nhưng PLINQ không được phép hoạt động?
Tôi đang làm gì sai?

Phiên bản MonoTouch là 5.3.5.

Cùng đi cho 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 - chỉ có thể là chế độ duy nhất có thể trên thiết bị iOS thực vì JIT bị cấm bởi Apple. –

+0

Đây có thể là một lỗi, báo cáo ở đây và đính kèm một dự án nhanh để tái tạo nó: http://bugzilla.xamarin.com – jonathanpeppers

Trả lời

4

This is a known limitation with MonoTouch and generics - trong trường hợp này đó là bởi vì bạn đang làm việc với các cấu trúc.

Nó sẽ làm việc nếu bạn sử dụng đối tượng thay vì:

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

Chúng tôi đang làm việc trên một số sửa chữa những hạn chế, vì vậy nó sẽ được tốt đẹp nếu bạn có thể nộp một báo cáo lỗi với một dự án mẫu để chúng tôi có một cái nhìn để xem nếu nó có thể thực sự sửa chữa trường hợp này vào ngày.

+1

Cảm ơn câu trả lời. Tôi hiểu bây giờ các cấu trúc đã đổ lỗi. –