static void ConsoleWriter() { foreach (var line in LinesToWrite.GetConsumingEnumerable()) { //This will get blocked while you hold down the scroll bar but // when you let go it will quickly catch up. Console.WriteLine(line); } }
static void Main(string[] args) { //The writer lives in another thread. var s = new Thread(ConsoleWriter); s.Start(); for (var z = 0; true; z++) { //This add call does not get blocked when Console.WriteLine gets blocked. LinesToWrite.Add(z.ToString()); Thread.Sleep(200); } }
public void DefaultRuntimeVersionsAreUpToDate() { var outputFile = "resolvedVersions.txt"; var testProjectCreator = new TestProjectCreator() { PackageName = "DefaultRuntimeVersionsAreUpToDate", MinorVersion = "3.0" }; var testProject = testProjectCreator.Create(); var projectFile = new DirectoryInfo(testProject.Root.FullName).GetFiles("*.csproj").First().FullName; var project = XDocument.Load(projectFile); string writeResolvedVersionsTarget = @$ " <Target Name=`WriteResolvedVersions` AfterTargets=`PrepareForBuild;ProcessFrameworkReferences`> <ItemGroup> <LinesToWrite Include=`%(KnownFrameworkReference.Identity) %(KnownFrameworkReference.DefaultRuntimeFrameworkVersion) %(KnownFrameworkReference.LatestRuntimeFrameworkVersion)`/> </ItemGroup> <WriteLinesToFile File=`$(OutputPath){ outputFile }` Lines=`@(LinesToWrite)` Overwrite=`true` Encoding=`Unicode`/> </Target>"; writeResolvedVersionsTarget = writeResolvedVersionsTarget.Replace('`', '"'); var targetElement = XElement.Parse(writeResolvedVersionsTarget); var ns = project.Root.Name.Namespace; foreach (var elem in targetElement.Descendants()) { elem.Name = ns + elem.Name.LocalName; } targetElement.Name = ns + targetElement.Name.LocalName; project.Root.Add(targetElement); using (var file = File.CreateText(projectFile)) { project.Save(file); } new RestoreCommand() .WithWorkingDirectory(testProject.Root.FullName) .Execute() .Should().Pass(); var binDirectory = new DirectoryInfo(testProject.Root.FullName).Sub("bin").Sub("Debug").GetDirectories().FirstOrDefault(); binDirectory.Should().HaveFilesMatching(outputFile, SearchOption.TopDirectoryOnly); var resolvedVersionsFile = File.ReadAllLines(Path.Combine(binDirectory.FullName, outputFile)); foreach (var framework in frameworks) { foreach (var version in versions) { var frameworkVersionLine = resolvedVersionsFile.Where(line => line.Contains(framework) && line.Contains(version)).FirstOrDefault(); frameworkVersionLine.Should().NotBeNullOrEmpty(); var defaultVersion = NuGetVersion.Parse(frameworkVersionLine.Split(" ")[1]); var latestVersion = NuGetVersion.Parse(frameworkVersionLine.Split(" ")[2]); if (latestVersion.Patch == 0 && latestVersion.IsPrerelease) { defaultVersion.Should().Be(latestVersion, $"the DefaultRuntimeFrameworkVersion for { framework } { version } in Microsoft.NETCoreSdk.BundledVersions.props does not match latest prerelease version { latestVersion }"); } else { defaultVersion.Should().Be(new NuGetVersion(latestVersion.Major, latestVersion.Minor, 0), $"the DefaultRuntimeFrameworkVersion for { framework } { version } in Microsoft.NETCoreSdk.BundledVersions.props needs to be updated to { version }.0"); } } } }