我对Metro风格应用程序(winrt)中的任务有疑问。
线程不可用(至少从Windows 8.1 / windows phone 8.1开始),因此要执行异步操作,我们必须立即使用Task。
当我创建Task并调用Run doest时,它会创建新的Thread吗?如果有,有办法杀死/停止该线程吗?
所有任务都是应用程序进程的一部分 - 所以当我调用Application.Current.Exit()时它会停止所有任务(如果我没有正确停止/关闭/结束它们吗?)如果不是它是否可能?在Thread中,您可以设置IsBackground属性以强制在应用程序关闭时关闭它们。
应用程序暂停时,“任务”会发生什么?什么是指导方针?
感谢您的帮助。
答案 0 :(得分:1)
当我创建Task并调用Run时它会创建新的Thread吗?如果有,有办法杀死/停止该线程吗?
它不会创建新线程,它将使用线程池中的线程。这假设您没有通过任何其他TaskScheduler
。
如果有,有办法杀死/停止该线程吗?
有一种方法可以通过CancellationToken
和CancellationTokenSource
结构进行合作取消。无法使用Task
中止Thread.Abort
。 Task != Thread
。
所以当我调用Application.Current.Exit()时,它会停止所有任务
默认情况下,Threadpool线程是后台的,它们不会像前台线程一样延长应用程序的生命周期。一旦应用程序关闭,您就可以安全地假设所有线程都已终止。