C# NET:在新线程上启动任务的多种方法;用哪一个?
我是初学者,对这门学科不太了解。但显然,所有这些语句都允许应用程序在后台线程中运行其任务。这真令人困惑。哪些应该使用/不使用或首选C# NET:在新线程上启动任务的多种方法;用哪一个?,c#,.net,multithreading,task,C#,.net,Multithreading,Task,我是初学者,对这门学科不太了解。但显然,所有这些语句都允许应用程序在后台线程中运行其任务。这真令人困惑。哪些应该使用/不使用或首选 Task t = new Task( () => doSomeWork() ); t.Start(); 及 及 及 而且可能还有更像BackgroundWorker。应该在什么时候使用它们?Task.Run相当于创建一个任务,然后运行Start。这些类型的任务在线程池上运行。通常,对于现代C#.NET中的后台操作,这是您想要的 使用Task.Factory.
Task t = new Task( () => doSomeWork() );
t.Start();
及
及
及
而且可能还有更像
BackgroundWorker
。应该在什么时候使用它们?Task.Run相当于创建一个任务,然后运行Start。这些类型的任务在线程池上运行。通常,对于现代C#.NET中的后台操作,这是您想要的
使用Task.Factory.StartNew可以在遗留代码中看到,但Microsoft建议使用Task.Run来执行现代计算绑定任务
手动创建线程是较低级别的操作,它会绕过线程池。通常情况下,这不是您想要的,因为线程池将处理诸如不创建太多线程之类的事情,并且还允许您编写异步代码、进行延续、传递同步上下文等
通常,您最好使用Task.Run。上的文档中清楚地讨论了任务的不同形式。有什么具体的东西不清楚吗?非常广泛的问题。“C#中有很多功能。我什么时候使用它们?”thanx…很有帮助。我还将阅读Claies评论中的建议链接……可能会有所帮助
Task t = Task.Run( () => doSomeWork1() );
Task t = Task.Factory.StartNew( () => doSomeWork2() );
Thread t = new Thread(new ThreadStart( doSomeWork3 ));
t.Start();