Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
掘金者说
vscode
提交
bacbfd23
V
vscode
项目概览
掘金者说
/
vscode
与 Fork 源项目一致
从无法访问的项目Fork
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
V
vscode
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
未验证
提交
bacbfd23
编写于
12月 11, 2019
作者:
C
Connor Peet
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
use built-in queue(), pr comments
上级
04ebcec7
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
28 addition
and
36 deletion
+28
-36
src/vs/workbench/contrib/debug/common/abstractDebugAdapter.ts
...vs/workbench/contrib/debug/common/abstractDebugAdapter.ts
+28
-36
未找到文件。
src/vs/workbench/contrib/debug/common/abstractDebugAdapter.ts
浏览文件 @
bacbfd23
...
@@ -5,7 +5,7 @@
...
@@ -5,7 +5,7 @@
import
{
Emitter
,
Event
}
from
'
vs/base/common/event
'
;
import
{
Emitter
,
Event
}
from
'
vs/base/common/event
'
;
import
{
IDebugAdapter
}
from
'
vs/workbench/contrib/debug/common/debug
'
;
import
{
IDebugAdapter
}
from
'
vs/workbench/contrib/debug/common/debug
'
;
import
{
timeout
}
from
'
vs/base/common/async
'
;
import
{
timeout
,
Queue
}
from
'
vs/base/common/async
'
;
/**
/**
* Abstract implementation of the low level API for a debug adapter.
* Abstract implementation of the low level API for a debug adapter.
...
@@ -18,7 +18,7 @@ export abstract class AbstractDebugAdapter implements IDebugAdapter {
...
@@ -18,7 +18,7 @@ export abstract class AbstractDebugAdapter implements IDebugAdapter {
private
requestCallback
:
((
request
:
DebugProtocol
.
Request
)
=>
void
)
|
undefined
;
private
requestCallback
:
((
request
:
DebugProtocol
.
Request
)
=>
void
)
|
undefined
;
private
eventCallback
:
((
request
:
DebugProtocol
.
Event
)
=>
void
)
|
undefined
;
private
eventCallback
:
((
request
:
DebugProtocol
.
Event
)
=>
void
)
|
undefined
;
private
messageCallback
:
((
message
:
DebugProtocol
.
ProtocolMessage
)
=>
void
)
|
undefined
;
private
messageCallback
:
((
message
:
DebugProtocol
.
ProtocolMessage
)
=>
void
)
|
undefined
;
private
readonly
queue
:
DebugProtocol
.
ProtocolMessage
[]
=
[]
;
private
readonly
queue
=
new
Queue
()
;
protected
readonly
_onError
=
new
Emitter
<
Error
>
();
protected
readonly
_onError
=
new
Emitter
<
Error
>
();
protected
readonly
_onExit
=
new
Emitter
<
number
|
null
>
();
protected
readonly
_onExit
=
new
Emitter
<
number
|
null
>
();
...
@@ -109,41 +109,33 @@ export abstract class AbstractDebugAdapter implements IDebugAdapter {
...
@@ -109,41 +109,33 @@ export abstract class AbstractDebugAdapter implements IDebugAdapter {
this
.
messageCallback
(
message
);
this
.
messageCallback
(
message
);
}
}
else
{
else
{
// Artificially queueing protocol messages guarantees that any microtasks for
this
.
queue
.
queue
(()
=>
{
// previous message finish before next message is processed. This is essential
switch
(
message
.
type
)
{
// to guarantee ordering when using promises anywhere along the call path.
case
'
event
'
:
this
.
queue
.
push
(
message
);
if
(
this
.
eventCallback
)
{
if
(
this
.
queue
.
length
===
1
)
{
this
.
eventCallback
(
<
DebugProtocol
.
Event
>
message
);
setTimeout
(()
=>
this
.
processQueue
(),
0
);
}
}
break
;
}
case
'
request
'
:
}
if
(
this
.
requestCallback
)
{
this
.
requestCallback
(
<
DebugProtocol
.
Request
>
message
);
private
processQueue
():
void
{
}
const
message
=
this
.
queue
!
.
shift
()
!
;
break
;
switch
(
message
.
type
)
{
case
'
response
'
:
case
'
event
'
:
const
response
=
<
DebugProtocol
.
Response
>
message
;
if
(
this
.
eventCallback
)
{
const
clb
=
this
.
pendingRequests
.
get
(
response
.
request_seq
);
this
.
eventCallback
(
<
DebugProtocol
.
Event
>
message
);
if
(
clb
)
{
}
this
.
pendingRequests
.
delete
(
response
.
request_seq
);
break
;
clb
(
response
);
case
'
request
'
:
}
if
(
this
.
requestCallback
)
{
break
;
this
.
requestCallback
(
<
DebugProtocol
.
Request
>
message
);
}
}
break
;
case
'
response
'
:
const
response
=
<
DebugProtocol
.
Response
>
message
;
const
clb
=
this
.
pendingRequests
.
get
(
response
.
request_seq
);
if
(
clb
)
{
this
.
pendingRequests
.
delete
(
response
.
request_seq
);
clb
(
response
);
}
break
;
}
if
(
this
.
queue
.
length
)
{
// Artificially queueing protocol messages guarantees that any microtasks for
setTimeout
(()
=>
this
.
processQueue
(),
0
);
// previous message finish before next message is processed. This is essential
// to guarantee ordering when using promises anywhere along the call path.
return
timeout
(
0
);
});
}
}
}
}
...
@@ -180,6 +172,6 @@ export abstract class AbstractDebugAdapter implements IDebugAdapter {
...
@@ -180,6 +172,6 @@ export abstract class AbstractDebugAdapter implements IDebugAdapter {
}
}
dispose
():
void
{
dispose
():
void
{
// noop
this
.
queue
.
dispose
();
}
}
}
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录