不使用结果的“await TaskScheduler.Default”的目的是什么?

emr*_*ins 2 .net task-parallel-library vsix async-await

我有一段代码,大致如下:

async Task Initialize(){
   await TaskScheduler.Default;
   var service = await CreateServiceAsync();
   await TaskScheduler.Default;
   var status = await service.CheckStatusAsync();  
   // ...
}
Run Code Online (Sandbox Code Playgroud)

TaskScheduler.Default如果我们不使用任务调度程序来安排任何事情,那么等待有什么用呢?如果删除它们,我可能会破坏什么?

这是 Visual Studio Extension (VSIX) 项目的启动代码。

Ste*_*ary 6

通常,任务调度程序无法await编辑。但是,VS SDK 确实有一些扩展允许等待任务调度程序。根据文档,它们被用作“切换”调用,以便该async方法只是在指定的TaskScheduler.

TaskScheduler.Default使用线程池进行延续,因此await TaskScheduler.Default将在方法的其余部分更改为线程池线程。

就我个人而言,我不喜欢“切换”方法,主要是因为可能不知道您所处的上下文,例如在一个catch块中。我更喜欢使用Task.Run显式范围来确定在线程池上完成的工作。