VSIX项目中,未用返回值时await TaskScheduler.Default的作用是什么?
VSIX代码里
await TaskScheduler.Default的作用和移除风险 一、这行代码到底干啥用的?
在异步方法里,await TaskScheduler.Default就是把后面的代码切换到线程池线程去执行。TaskScheduler.Default对应的是.NET的线程池调度器,await它之后,后续的CreateServiceAsync、CheckStatusAsync这些操作就不会在Visual Studio的UI主线程上运行了。
写这行的核心目的就是:避免把耗时的初始化操作放在VS的UI线程上处理,防止VS启动时界面卡成假死状态。
二、删掉它会有啥问题?
VS扩展的启动代码默认是跑在UI主线程上的,移除后可能出现这些状况:
- 如果直接在UI线程await那些耗时的异步方法,要是方法内部存在同步阻塞逻辑(比如等待IO完成、执行密集计算),UI线程会被卡死,VS启动时界面完全动不了,甚至弹出“程序无响应”的系统提示。
- 另外,VS的性能规范明确不建议在UI线程执行耗时操作,这么干可能会被VS的性能检测工具标记为问题;要是你打算把扩展上传到VS市场,还可能影响扩展的审核结果。
额外说明
await TaskScheduler.Default这种写法,本质和await Task.Run(() => {})类似,但更轻量——它没有额外包装一个任务,只是单纯切换了代码执行的调度上下文。
内容的提问来源于stack exchange,提问作者emragins
相关产品推荐
相关产品推荐

