我很难理解为什么某些代码永远不会执行。
考虑这种扩展方法:
type WebSocketListener with
member x.AsyncAcceptWebSocket = async {
try
let! client = Async.AwaitTask <| x.AcceptWebSocketAsync Async.DefaultCancellationToken
if(not (isNull client)) then
return Some client
else
return None
with
| :? System.Threading.Tasks.TaskCanceledException ->
| :? AggregateException ->
return None
}
我知道当取消令牌被取消时AcceptSocketAsync
会抛出一个。TaskCanceledException
我已经签入了一个 C# 应用程序。想法是回归None
。
然而,这永远不会发生。return None
如果我在最后一个甚至在表达式中放置一个断点,if
当取消令牌被取消时,它永远不会停在那里。而且我知道它正在等待,Async.AwaitTask
因为如果在取消之前,其他客户端连接,它可以工作并在断点处停止。
我有点迷茫,为什么异常丢了?