我们可以在 Xamarin iOS 中并行调用方法(带参数)吗?
Can we call methods (with parameters) in Parallel in 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 用于 android,一个没有用于 iOS.
如果您知道更好的选择,或者如果您知道为什么 lambda 表达式无法在 Xamarin 上运行 iOS 请告诉我。
我正在使用的参考文献:
- Xamarin 表单 v4.4.0.991265
- 模拟 iPhone8 和 iPhone11 pro
好的,我找到了解决方案:
问题不是来自委托,而是来自我传递的“conn”对象参数。我无法设置连接(这里是 SQLite 连接)并通过不同的方法 运行 并行传递它。它适用于 Android 但不适用于 iOS。
所以我保留了 Parallel.Invoke 但删除了连接参数,现在我在各个方法中设置连接。
我有一个使用 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 用于 android,一个没有用于 iOS.
如果您知道更好的选择,或者如果您知道为什么 lambda 表达式无法在 Xamarin 上运行 iOS 请告诉我。
我正在使用的参考文献:
- Xamarin 表单 v4.4.0.991265
- 模拟 iPhone8 和 iPhone11 pro
好的,我找到了解决方案:
问题不是来自委托,而是来自我传递的“conn”对象参数。我无法设置连接(这里是 SQLite 连接)并通过不同的方法 运行 并行传递它。它适用于 Android 但不适用于 iOS。
所以我保留了 Parallel.Invoke 但删除了连接参数,现在我在各个方法中设置连接。