Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
dotNET Platform
fsharp
提交
d12aad70
F
fsharp
项目概览
dotNET Platform
/
fsharp
12 个月 前同步成功
通知
0
Star
1
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
F
fsharp
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
d12aad70
编写于
6月 07, 2017
作者:
D
Don Syme
提交者:
Kevin Ransom (msft)
6月 07, 2017
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
fix 3171 (#3182)
上级
36a3f0f7
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
22 addition
and
5 deletion
+22
-5
vsintegration/src/FSharp.Editor/Common/RoslynHelpers.fs
vsintegration/src/FSharp.Editor/Common/RoslynHelpers.fs
+22
-5
未找到文件。
vsintegration/src/FSharp.Editor/Common/RoslynHelpers.fs
浏览文件 @
d12aad70
...
...
@@ -92,7 +92,10 @@ module internal RoslynHelpers =
member
__.
Proceed
=
not
isStopped
member
__.
Stop
()
=
isStopped
<-
true
// This is like Async.StartAsTask, but if cancellation occurs we explicitly associate the cancellation with cancellationToken
// This is like Async.StartAsTask, but
// 1. if cancellation occurs we explicitly associate the cancellation with cancellationToken
// 2. if exception occurs then set result to Unchecked.defaultof<_>, i.e. swallow exceptions
// and hope that Roslyn copes with the null
let
StartAsyncAsTask
(
cancellationToken
:
CancellationToken
)
computation
=
let
tcs
=
new
TaskCompletionSource
<_>(
TaskCreationOptions
.
None
)
let
barrier
=
VolatileBarrier
()
...
...
@@ -102,10 +105,24 @@ module internal RoslynHelpers =
Async
.
StartWithContinuations
(
async
{
do
!
Async
.
SwitchToThreadPool
()
return
!
computation
},
continuation
=(
fun
result
->
disposeReg
()
;
tcs
.
TrySetResult
(
result
)
|>
ignore
),
exceptionContinuation
=(
function
:?
OperationCanceledException
->
disposeReg
()
;
tcs
.
TrySetCanceled
(
cancellationToken
)
|>
ignore
|
exn
->
disposeReg
()
;
tcs
.
TrySetException
(
exn
)
|>
ignore
),
cancellationContinuation
=(
fun
_
oce
->
disposeReg
()
;
tcs
.
TrySetCanceled
(
cancellationToken
)
|>
ignore
),
continuation
=(
fun
result
->
disposeReg
()
tcs
.
TrySetResult
(
result
)
|>
ignore
),
exceptionContinuation
=(
fun
exn
->
disposeReg
()
match
exn
with
|
:?
OperationCanceledException
->
tcs
.
TrySetCanceled
(
cancellationToken
)
|>
ignore
|
exn
->
System
.
Diagnostics
.
Trace
.
WriteLine
(
"Visual F# Tools: exception swallowed and not passed to Roslyn: {0}"
,
exn
.
Message
)
let
res
=
Unchecked
.
defaultof
<_>
tcs
.
TrySetResult
(
res
)
|>
ignore
),
cancellationContinuation
=(
fun
_
oce
->
disposeReg
()
tcs
.
TrySetCanceled
(
cancellationToken
)
|>
ignore
),
cancellationToken
=
cancellationToken
)
task
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录