AsParallel崩溃了一个MonoTouch应用程序

时间:2012-08-14 18:45:23

标签: c# xamarin.ios task-parallel-library plinq

MonoTouch advertises在其网站上使用此代码段支持AsParallel

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

然而,即使是一个微不足道的样本也会崩溃我的应用程序:

 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.

我知道MonoTouch无法处理虚拟通用方法但是PLINQ不能正常工作吗? 我做错了什么?

MonoTouch版本为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.

1 个答案:

答案 0 :(得分: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();

我们正在努力修复其中的一些限制,因此,如果您可以向我们提交示例项目的错误报告,以便了解是否有可能在当天实际修复此案例,那就太好了。