我们可以在 Xamarin iOS 中并行调用方法带参数吗?

问题描述

我有一个使用 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 而不是普通方法,并将参数存储在其他地方以在操作中访问。或者有两个版本的代码一个带有parallel.invoke for android,一个不带iOS。

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

对于我正在使用的参考:

  • Xamarin 表单 v4.4.0.991265
  • iPhone8 和 iphone11 pro 的模拟

解决方法

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

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

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