问题描述
我有一个使用 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 但删除了连接参数,现在我在各个方法中设置了连接。