0

我有一个使用 Parallel.Invoke 的 Xamarin 应用程序,它在 Android 上运行良好。

Parallel.Invoke
(
  () => AddOrReplaceWordsAndDefinitions(wordsAndDefinitions, conn),
  () => AddOrReplaceWords(wordsAndDefinitions, conn)
);

但是我现在正在尝试在 iOS 版本上工作,它崩溃不是因为 Parallel.Invoke 而是因为 lambda 表达式() =>

如果我使用以下操作执行 Parallel.Invoke,它将在 iOS 上运行,但我不会有我的参数:

Parallel.Invoke
(
  Action1,
  Action2
);

我尝试使用 Tasks 而不是 parallel.invoke,但由于我的代码不使用异步,我必须() =>在某个时候使用 lambda 表达式,在这里或其他地方。

我也尝试过使用委托,但它在 iOS 上也不起作用。所以到目前为止我发现的唯一选择是使用 System.Action 而不是普通方法,并将参数存储在其他地方以便在操作中访问。或者有两个版本的代码,一个带有用于 android 的 parallel.invoke,一个没有用于 iOS。

如果您知道更好的选择,或者您知道为什么 lambda 表达式在 Xamarin iOS 上不起作用,请告诉我。

对于我正在使用的参考资料:

  • Xamarin 形式 v4.4.0.991265
  • iPhone8和iPhone11 pro的模拟
4

1 回答 1

0

好的,我找到了解决方案:

问题不是来自委托,而是来自我通过的“conn”对象参数。我无法设置连接(这里是 SQLite 连接)并通过并行运行的不同方法传递它。它适用于Android,但不适用于iOS。

所以我保留了 Parallel.Invoke 但删除了连接参数,现在我在各个方法中设置连接。

于 2021-02-02T11:14:14.067 回答