Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# NET:在新线程上启动任务的多种方法;用哪一个?_C#_.net_Multithreading_Task - Fatal编程技术网

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();