Task.Factory.StartNew
时间: 2023-11-26 15:04:22 浏览: 123
Task.Factory.StartNew 是 .NET Framework 中的一种方法,用于启动一个新的线程并在该线程中执行指定的操作。
它的基本语法如下:
```
Task.Factory.StartNew(Action action);
```
其中,action 参数是一个代表要在新线程中执行的操作的委托。
Task.Factory.StartNew 方法返回一个 Task 对象,你可以使用该对象来跟踪任务的状态,等待任务完成等操作。
此外,Task.Factory.StartNew 还有其他重载形式,允许你指定任务的调度选项、取消选项、执行操作的返回值类型等。
相关问题
Task.Run与Task.Factory.StartNew的区别
Task.Run 和 Task.Factory.StartNew 都可以用来创建并启动一个新的任务,但是它们有以下区别:
1. 调用方式不同:Task.Run 是一个静态方法,可以直接通过类调用;而 Task.Factory.StartNew 是通过 Task.Factory 实例化一个 Task 对象,再调用其 StartNew 方法。
2. Task.Run 更加简洁:Task.Run 只需要传入一个 Action 或 Func 委托作为任务的执行体,而 Task.Factory.StartNew 则需要传入一个 TaskCreationOptions 枚举值来指定任务的类型。
3. Task.Run 默认使用 TaskScheduler.Default 调度器:Task.Run 创建的任务默认使用 TaskScheduler.Default 调度器,在 .NET Framework 4.5 之后,这个调度器会使用当前线程的上下文来执行任务。而 Task.Factory.StartNew 则需要通过重载方法来指定调度器。
综上所述,Task.Run 更加简洁易用,且默认使用当前线程上下文执行任务,而 Task.Factory.StartNew 则可以更加灵活地指定任务的类型和调度器。
winform Task.Factory.StartNew与Task.run的区别
`Task.Factory.StartNew` 和 `Task.Run` 都是用于创建并执行异步任务的方法,它们的主要区别在于:
1. `Task.Factory.StartNew` 的第一个参数是一个委托,而 `Task.Run` 的参数是一个 `Func<Task>` 委托。也就是说,`Task.Run` 直接接受一个返回 `Task` 的方法作为参数,而 `Task.Factory.StartNew` 则需要传入一个委托(`Action` 或 `Func<T>`),并且需要手动指定 `TaskCreationOptions` 和 `TaskScheduler`。
2. `Task.Run` 会自动将 `TaskCreationOptions` 设置为 `TaskCreationOptions.DenyChildAttach`,这样创建的任务将不会作为父任务的子任务执行。而 `Task.Factory.StartNew` 默认会创建可附加的子任务。
3. `Task.Run` 和 `Task.Factory.StartNew` 默认使用 `TaskScheduler.Default`,也就是线程池调度器。但是,`Task.Factory.StartNew` 可以明确地指定任务使用的调度器。
因此,如果你只需要创建一个简单的异步任务,并且不需要手动指定 `TaskCreationOptions` 和 `TaskScheduler`,那么 `Task.Run` 是更简洁、更易读的选择。而如果你需要更多的灵活性和控制,可以使用 `Task.Factory.StartNew`。
阅读全文