5

MonoTouchは、次のコード スニペットを使用して Web サイトでのサポートを宣伝しています。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 がスローされました。 実行中に JIT コンパイル メソッド 'System.Linq.Parallel.QueryNodes.WrapHelper:<Wrap<code>1>m__4A<int>(System.Collections.Generic.IEnumerator</code>1<int>)' を試行中 -- aot のみ。

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.
4

1 に答える 1

4

これは、MonoTouch とジェネリックの既知の制限です。この場合は、構造体を操作しているためです。

代わりにオブジェクトを使用すると機能するはずです。

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

これらの制限の一部を修正する作業を行っているため、サンプル プロジェクトでバグ レポートを提出して、実際にこのケースを当日修正できるかどうかを確認していただけると幸いです。

于 2012-09-04T10:12:57.537 に答える