我有一堆工作要做(CPU 密集型或 IO 密集型,没有异步接口可用)。我想知道是否可以像这样在任务中完成所有非异步工作:
async Task DoSomeStuff()
{
await SomethingAsync();
…
DoCpuBoundWork();
…
await SomethingElseAsync();
}
或者我应该像这样使用 Task.Run 吗?
async Task DoSomeStuff()
{
await SomethingAsync();
…
await Task.Run(() => DoCpuBoundWork());
…
await SomethingElseAsync();
}
我知道任务不一定在另一个线程上执行,所以我想知道调度程序是否会假设任务是非阻塞的,这将使在 Task.Run 之外执行 CPU 密集型工作减慢应用程序的速度。例如,如果调度程序决定将受 CPU 限制的工作调度到应用程序的 UI 线程,则可能会变慢。
我确定以前有人问过这个问题,但是我找不到合适的关键字来搜索它,对此感到抱歉。
慕勒3428872
冉冉说
相关分类