【发布时间】:2014-06-29 23:06:12
【问题描述】:
我想知道。如何在单独的线程中开始上课?我想在单独的线程中处理外部事件。我怎么能做到这一点。我尝试使用无限循环,但没有帮助。
public class Class1
{
public void Run()
{
Task.Factory.StartNew(() =>
{
while (true)
{
}
}, CancellationToken.None, TaskCreationOptions.LongRunning, TaskScheduler.Default);
}
public void Show()
{
Console.WriteLine(AppDomain.GetCurrentThreadId().ToString(CultureInfo.InvariantCulture));
}
当我在控制台打印的主流 ID 中调用 Show() 方法时。
【问题讨论】:
-
启动一个类,就像创建一个实例一样?
-
是的,例如。我想做这样的事情。 Task.Run (() => new Class1());并且该类存在于应用程序的生命周期中。
-
然后在你的 Run 方法中使用
Task.Run (() => new Class1().Run());并调用Show。 -
要拥有一个在应用程序的整个生命周期中都存在的实例,您应该将其作为静态初始化字段或在 Main 开头声明它。任务用于异步编程,而不是作为一些随处使用的工具。如果您想在应用程序的生命周期内连续执行某些作业,您应该使用一些后台线程,因为 TPL 旨在支持 run-the-task-get-the-result 模型,而不是 run-the-service-use-it型号
-
@Eugene 我觉得你有点过火了。他只是想知道如何在不同的线程上运行无限循环。
Task不仅适用于async或运行任务并获取结果,它是对线程池和线程创建的抽象