winform Task.Factory.StartNew与Task.run的区别
时间: 2024-03-05 15:36:12 浏览: 126
`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`。
阅读全文