【发布时间】:2015-09-02 03:21:41
【问题描述】:
我需要取消一个返回 Task 的 API 调用,但它没有将 CancellationToken 作为参数,我无法添加。
如何取消该任务?
在这种特殊情况下,我将 Xamarin.Forms 与 Geocoder 对象一起使用。
IEnumerable<Position> positions = await geo.GetPositionsForAddressAsync(address);
该调用有时可能需要很长时间。对于我的一些用例,用户只需导航到另一个屏幕,就不再需要该任务的结果。
我还担心我的应用程序会进入休眠状态并且没有停止这个长时间运行的任务,或者任务完成并且需要不再有效的代码。
【问题讨论】:
-
假设我们一直在谈论 .NET 代码,也许你可以在一个孩子
AppDomain中使用它?如果它对小猫行为不端或残忍,你可以Unload()它 -
@MickyDuncan 卸载 AppDomain 仍然不是最好的解决方案,如果您使用非托管资源并且由于卸载而没有被释放,直到所有 AppDomain 都被卸载并且该过程才会被释放终止。将其设为一个完全独立的进程并使用某种形式的 IPC 与两者进行通信可能会更好。
-
@ScottChamberlain 我确实说过 “假设我们一直在谈论 .NET 代码”。是的,我喜欢 IPC 方法,感谢 Scott
-
@mickyDuncan 我会考虑使用
Marshal.StructureToPtrto serialize a struct .NET 代码执行Marshal.AllocHGlobal,但我明白你的意思。
标签: c# xamarin task-parallel-library .net-4.5 xamarin.forms