@@ -385,6 +385,7 @@ module internal Extensions =
385385open System
386386open System.IO
387387open Microsoft.FSharp .Compiler .Ast
388+ open Microsoft.VisualStudio .FSharp .Editor .Logging
388389
389390type System.IServiceProvider with
390391member x.GetService < 'T >() = x.GetService( typeof< 'T>) :?> 'T
@@ -416,26 +417,37 @@ module internal Extensions =
416417}
417418
418419member this.ParseAndCheckDocument ( filePath : string , textVersionHash : int , sourceText : string , options : FSharpProjectOptions , allowStaleResults : bool ) : Async <( FSharpParseFileResults * Ast.ParsedInput * FSharpCheckFileResults ) option > =
420+ let log =
421+ let file = Path.GetFileName filePath
422+ Printf.kprintf( fun s -> Logging.logInfof" [ParseAndCheckDocument(%s )]%s " file s)
419423async {
424+ use ready= new SemaphoreSlim( 0 )
420425let! freshResults =
421426async {
422- use ready= new SemaphoreSlim( 1 )
423427let! worker =
424428async {
429+ log" --> ParseAndCheckFileInProject"
425430let! parseResults , checkFileAnswer = this.ParseAndCheckFileInProject( filePath, textVersionHash, sourceText, options)
431+ log" <-- ParseAndCheckFileInProject"
426432let result =
427433match checkFileAnswerwith
428434| FSharpCheckFileAnswer.Aborted->
429435 None
430436| FSharpCheckFileAnswer.Succeeded( checkFileResults) ->
431437 Some( parseResults, checkFileResults)
432438 ready.Release() |> ignore
439+ log" `ready` released"
433440return result
434- } |> Async.StartChildAsTask
441+ } |> Async.StartChild
442+ log" waiting for result for 2 seconds"
435443let! gotResult = ready.WaitAsync( TimeSpan.FromSeconds2. ) |> Async.AwaitTask
436- if gotResultthen
437- return Ready worker.Result
438- else return StillRunning( Async.AwaitTask worker)
444+ if gotResultthen
445+ log" got result in 2 seconds"
446+ let! result = worker
447+ return Ready result
448+ else
449+ log" DID NOT get result in 2 seconds"
450+ return StillRunning worker
439451}
440452
441453let! results =
@@ -445,8 +457,10 @@ module internal Extensions =
445457async {
446458match allowStaleResults, this.TryGetRecentCheckResultsForFile( filePath, options) with
447459| true , Some( parseResults, checkFileResults, _) ->
460+ log" returning stale results"
448461return Some( parseResults, checkFileResults)
449462| _ ->
463+ log" stale results cannot be returned, waiting for `worker` to complete"
450464return ! worker
451465}
452466