.net 直接调用任务返回方法和使用task.Run扭曲任务返回方法有什么区别?

.net 直接调用任务返回方法和使用task.Run扭曲任务返回方法有什么区别?,.net,async-await,.net,Async Await,我知道Task.Run将从threadpool获取一个线程来运行该方法,此外,在下面的代码中,它还需要使用Task.Run扭曲任务返回方法 我指的是 除此之外,为什么在下面的代码中需要使用task.Run扭曲任务返回方法 没有什么好的理由。由于这是ASP.NET核心,因此代码大致相当于 _ = BackgroundOperationAsync(); 该示例试图说明的要点是避免async void,而是使用async Task(对于BackgroundOperationAsync)。然而,我认为

我知道Task.Run将从threadpool获取一个线程来运行该方法,此外,在下面的代码中,它还需要使用Task.Run扭曲任务返回方法

我指的是

除此之外,为什么在下面的代码中需要使用task.Run扭曲任务返回方法

没有什么好的理由。由于这是ASP.NET核心,因此代码大致相当于

_ = BackgroundOperationAsync();

该示例试图说明的要点是避免
async void
,而是使用
async Task
(对于
BackgroundOperationAsync
)。然而,我认为这个具体的例子是有问题的,因为在ASP.NET内核上执行fire and forget根本不是我所说的“好”解决方案;虽然
async Task
略优于
async void
,但两者都不是“好”的解决方案。

一个可能的原因是确保整个方法在单独的线程上运行。如果直接调用它,则第一个
wait
之前的部分将在当前线程上运行


在这个特定的示例中,在第一次等待之前没有代码,但我认为可能有代码。

主要区别:您正在浪费一个线程,并无缘无故地导致线程切换。我认为这就是原因
_ = BackgroundOperationAsync();