.net 直接调用任务返回方法和使用task.Run扭曲任务返回方法有什么区别?
我知道Task.Run将从threadpool获取一个线程来运行该方法,此外,在下面的代码中,它还需要使用Task.Run扭曲任务返回方法 我指的是 除此之外,为什么在下面的代码中需要使用task.Run扭曲任务返回方法 没有什么好的理由。由于这是ASP.NET核心,因此代码大致相当于.net 直接调用任务返回方法和使用task.Run扭曲任务返回方法有什么区别?,.net,async-await,.net,Async Await,我知道Task.Run将从threadpool获取一个线程来运行该方法,此外,在下面的代码中,它还需要使用Task.Run扭曲任务返回方法 我指的是 除此之外,为什么在下面的代码中需要使用task.Run扭曲任务返回方法 没有什么好的理由。由于这是ASP.NET核心,因此代码大致相当于 _ = BackgroundOperationAsync(); 该示例试图说明的要点是避免async void,而是使用async Task(对于BackgroundOperationAsync)。然而,我认为
_ = BackgroundOperationAsync();
该示例试图说明的要点是避免
async void
,而是使用async Task
(对于BackgroundOperationAsync
)。然而,我认为这个具体的例子是有问题的,因为在ASP.NET内核上执行fire and forget根本不是我所说的“好”解决方案;虽然async Task
略优于async void
,但两者都不是“好”的解决方案。一个可能的原因是确保整个方法在单独的线程上运行。如果直接调用它,则第一个wait
之前的部分将在当前线程上运行
在这个特定的示例中,在第一次等待之前没有代码,但我认为可能有代码。主要区别:您正在浪费一个线程,并无缘无故地导致线程切换。我认为这就是原因
_ = BackgroundOperationAsync();