假设您想要执行一个静态任务而不等待它,并且您想要在 MVVM 项目中在页面的 ViewModel 实例的命令中执行此任务。
此任务应该只调用一个 API 来发送一些事件信息,并且您只想启动它而不等待它,以免在任务运行时无用地阻止您想要执行的其他东西而不等待其完成。
让我们看一个简化的例子:
ViewModel 命令内部:
// Purchase completed
<code to purchase here>
// API Call to send event
await Task.Run(() => { _ = ApiService.PostEvent("purchased"); });
// Navigate Back
<code to navigate back here>
重点是:如果在任务完成之前导航回来,ViewModel 将被垃圾收集,任务线程也是如此,因此任务永远不会结束。
我怎样才能防止这种情况发生?
我是否可以在线程上运行任务,即使其创建者被销毁,该线程也不会被销毁?还是我应该采用完全不同的方法?
从澄清注释中,我们来看看创建任务、立即执行导航、从处理程序返回、然后(可选)恢复以处理任务结果的模式。此处,执行时 UI 活动不会被阻止。
PostEvent