Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
lwm1986
roslyn
提交
42ddc197
R
roslyn
项目概览
lwm1986
/
roslyn
与 Fork 源项目一致
从无法访问的项目Fork
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
R
roslyn
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
未验证
提交
42ddc197
编写于
6月 19, 2019
作者:
S
Sam Harwell
提交者:
GitHub
6月 19, 2019
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #36551 from sharwell/timeout-replacetext
Apply a hang mitigating timeout to UI thread operations
上级
01400ab9
1be64b16
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
22 addition
and
11 deletion
+22
-11
src/VisualStudio/IntegrationTest/TestUtilities/InProcess/InProcComponent.cs
...ntegrationTest/TestUtilities/InProcess/InProcComponent.cs
+22
-11
未找到文件。
src/VisualStudio/IntegrationTest/TestUtilities/InProcess/InProcComponent.cs
浏览文件 @
42ddc197
...
@@ -5,7 +5,6 @@
...
@@ -5,7 +5,6 @@
using
System.Windows
;
using
System.Windows
;
using
System.Windows.Threading
;
using
System.Windows.Threading
;
using
EnvDTE
;
using
EnvDTE
;
using
Microsoft.CodeAnalysis.Editor.Shared.Utilities
;
using
Microsoft.VisualStudio.ComponentModelHost
;
using
Microsoft.VisualStudio.ComponentModelHost
;
using
Microsoft.VisualStudio.Shell
;
using
Microsoft.VisualStudio.Shell
;
using
Microsoft.VisualStudio.Shell.Interop
;
using
Microsoft.VisualStudio.Shell.Interop
;
...
@@ -26,21 +25,20 @@ namespace Microsoft.VisualStudio.IntegrationTest.Utilities.InProcess
...
@@ -26,21 +25,20 @@ namespace Microsoft.VisualStudio.IntegrationTest.Utilities.InProcess
/// </summary>
/// </summary>
internal
abstract
class
InProcComponent
:
MarshalByRefObject
internal
abstract
class
InProcComponent
:
MarshalByRefObject
{
{
private
JoinableTaskFactory
_joinableTaskFactory
;
private
static
JoinableTaskFactory
_joinableTaskFactory
;
protected
InProcComponent
()
{
}
protected
InProcComponent
()
{
}
private
static
Dispatcher
CurrentApplicationDispatcher
private
static
Dispatcher
CurrentApplicationDispatcher
=>
Application
.
Current
.
Dispatcher
;
=>
Application
.
Current
.
Dispatcher
;
protected
JoinableTaskFactory
JoinableTaskFactory
protected
static
JoinableTaskFactory
JoinableTaskFactory
{
{
get
get
{
{
if
(
_joinableTaskFactory
is
null
)
if
(
_joinableTaskFactory
is
null
)
{
{
var
threadingContext
=
GetComponentModelService
<
IThreadingContext
>();
Interlocked
.
CompareExchange
(
ref
_joinableTaskFactory
,
ThreadHelper
.
JoinableTaskFactory
.
WithPriority
(
CurrentApplicationDispatcher
,
DispatcherPriority
.
Background
),
null
);
Interlocked
.
CompareExchange
(
ref
_joinableTaskFactory
,
threadingContext
.
JoinableTaskFactory
.
WithPriority
(
CurrentApplicationDispatcher
,
DispatcherPriority
.
Background
),
null
);
}
}
return
_joinableTaskFactory
;
return
_joinableTaskFactory
;
...
@@ -50,17 +48,30 @@ protected JoinableTaskFactory JoinableTaskFactory
...
@@ -50,17 +48,30 @@ protected JoinableTaskFactory JoinableTaskFactory
protected
static
void
InvokeOnUIThread
(
Action
<
CancellationToken
>
action
)
protected
static
void
InvokeOnUIThread
(
Action
<
CancellationToken
>
action
)
{
{
using
var
cancellationTokenSource
=
new
CancellationTokenSource
(
Helper
.
HangMitigatingTimeout
);
using
var
cancellationTokenSource
=
new
CancellationTokenSource
(
Helper
.
HangMitigatingTimeout
);
#pragma warning disable VSTHRD001 // Avoid legacy thread switching APIs
var
operation
=
JoinableTaskFactory
.
RunAsync
(
async
()
=>
CurrentApplicationDispatcher
.
Invoke
(()
=>
action
(
cancellationTokenSource
.
Token
),
DispatcherPriority
.
Background
,
cancellationToken
:
cancellationTokenSource
.
Token
);
{
#pragma warning restore VSTHRD001 // Avoid legacy thread switching APIs
await
JoinableTaskFactory
.
SwitchToMainThreadAsync
(
cancellationTokenSource
.
Token
);
cancellationTokenSource
.
Token
.
ThrowIfCancellationRequested
();
action
(
cancellationTokenSource
.
Token
);
});
operation
.
Task
.
Wait
(
cancellationTokenSource
.
Token
);
}
}
protected
static
T
InvokeOnUIThread
<
T
>(
Func
<
CancellationToken
,
T
>
action
)
protected
static
T
InvokeOnUIThread
<
T
>(
Func
<
CancellationToken
,
T
>
action
)
{
{
using
var
cancellationTokenSource
=
new
CancellationTokenSource
(
Helper
.
HangMitigatingTimeout
);
using
var
cancellationTokenSource
=
new
CancellationTokenSource
(
Helper
.
HangMitigatingTimeout
);
#pragma warning disable VSTHRD001 // Avoid legacy thread switching APIs
var
operation
=
JoinableTaskFactory
.
RunAsync
(
async
()
=>
return
CurrentApplicationDispatcher
.
Invoke
(()
=>
action
(
cancellationTokenSource
.
Token
),
DispatcherPriority
.
Background
,
cancellationToken
:
cancellationTokenSource
.
Token
);
{
#pragma warning restore VSTHRD001 // Avoid legacy thread switching APIs
await
JoinableTaskFactory
.
SwitchToMainThreadAsync
(
cancellationTokenSource
.
Token
);
cancellationTokenSource
.
Token
.
ThrowIfCancellationRequested
();
return
action
(
cancellationTokenSource
.
Token
);
});
operation
.
Task
.
Wait
(
cancellationTokenSource
.
Token
);
return
operation
.
Task
.
Result
;
}
}
protected
static
TInterface
GetGlobalService
<
TService
,
TInterface
>()
protected
static
TInterface
GetGlobalService
<
TService
,
TInterface
>()
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录