Task.Factory.StartNew,保持相同的线程

时间:2013-09-06 14:23:42

标签: c# task-parallel-library

我喜欢一个可以重用于许多任务的线程,但是我可以强制一个Task只能在同一个Thread中运行吗?

后续 总是很高兴回来看看5降级。实际上我认为这个问题具有相关性。今天我正在使用线程,这可以正常工作,但线程大多数时间都处于休眠状态。任务可以解决这个问题但是线程使用的资源只能从同一个线程创建和访问。现在你知道我问的原因了。

2 个答案:

答案 0 :(得分:3)

是的,您可以通过使用TaskScheduler或使用SynchronizationContext来实现此目的。这两种方法都允许您在同一个线程下运行任意数量的任务,甚至可能是创建任务的线程。

如果您在已经有SynchronizationContext的UI上下文中创建任务,那么您可以将其传入。如果没有,您需要创建自己的上下文以传递给任务确定应该如何执行传递给它的任务。你可以创建一个新的同步上下文,给它一些任务,然后让它在当前线程中执行它们,如果你愿意的话。 Here是一篇博客文章,其中包含一个确切概念的示例。它包含了关于该主题的整个系列中使用的所有代码的链接。

答案 1 :(得分:-1)

我很确定使用Task是不可能的,因为任务没有(据我所知)garanty使用单独的线程来执行任务。你当然可以使用线程本身并编写代码来使用相同的线程。请记住,一旦线程停止,就无法重新启动。