如果我要使用TaskFactory.StartNew(MyFunc(), new CancellationToken(), TaskCreationOptions.None, TaskScheduler.Current)会发生什么呢?
对于TaskScheduler.Current,它只是同步执行MyFunc(),还是使用一些随机线程,或者其他什么?
发布于 2015-01-28 11:34:11
对于TaskScheduler.Current,它只是同步执行MyFunc(),还是使用一些随机线程,或者其他什么?
这取决于执行的范围和Current的值。虽然这是非常不可能是同步执行。即使使用了UI同步上下文,它也将使用BeginInvoke异步发布,但它将被发布到UI线程。
关于Current,医生说的价值
当不在任务中调用时,Current将返回默认调度程序。
如果您从另一个Task执行此代码,在其中您传递了另一个TaskScheduler,那么Current的值就是这个值,也就是您的委托的运行位置。例如,如果从UI线程捕获了TaskScheduler.FromCurrentSynchronizationContext,您将最终将此委托提交给UI消息循环。否则,它将使用Default,即ThreadPoolTaskScheduler,而不是在任意线程池线程上调用委托。
https://stackoverflow.com/questions/28191033
复制相似问题