首页 > 其他分享 >dotnet 警惕判断文件是否存在因为检查网络资源造成超长等待

dotnet 警惕判断文件是否存在因为检查网络资源造成超长等待

时间:2023-09-05 15:01:43浏览次数:56  
标签:文件 判断 是否 路径 网络资源 超长 File dotnet

在使用 System.IO.File.Exists 方法时,绝大部分的情况下都是一个非常快捷且没有成本的,但是如果判断的文件是否存在,是从非自己完全控制的逻辑下进入的,那就需要警惕是否判断的文件路径属于一个网络资源。判断一个网络资源是否存在,是一个耗时不可确定行为,很有可能造成主线程卡顿

如果是传入了一个 url 路径,此路径是采用 // 或者 \\ 开头的,那可能这将会是一个网络路径,或者是一个 UNC 格式的路径。如果是前者,那确实很有可能让 System.IO.File.Exists 方法判断需要等待超时,导致了这个同步的判断文件是否存在的方法卡住当前线程。如果刚好当前的线程是主线程,那就更加不好玩了

因此,在判断一个非自己完全控制的传入参数,判断此参数表示的文件是否存在时,那谨慎在主线程调用

详细的关于文件的路径表示格式,请参阅:

File path formats on Windows systems Microsoft Learn

标签:文件,判断,是否,路径,网络资源,超长,File,dotnet
From: https://www.cnblogs.com/lindexi/p/17679573.html

相关文章

  • dotnet 记 TaskCompletionSource 的 SetException 可能将异常记录到 UnobservedTaskEx
    本文将记录dotnet的一个已知问题,且是设计如此的问题。假定有一个TaskCompletionSource对象,此对象的Task没有被任何地方引用等待。在TaskCompletionSource被调用SetException或TrySetException方法时,将会记录一个存在异常且未捕获的Task对象。此Task对象将会在被G......
  • dotnet 读 WPF 源代码笔记 渲染层是如何将字符 GlyphRun 画出来的
    从业务代码构建出来GlyphRun对象,在WPF的渲染层里,如何利用GlyphRun提供的数据将字符在界面呈现出来。本文将和大家聊聊从WPF的渲染层获取到GlyphRun数据,到调用DirectX的各个渲染相关方法的过程,也就是WPF绘制文本字符的原理或者实现方法大家印象中的绘制一段文本是调......
  • dotnet 读 WPF 源代码笔记 聊聊 HwndWrapper
    我在阅读WPF源代码,在HwndWrapper的静态构造函数看到了申请了HwndWrapper.GetGCMemMessage这个Windows消息,好奇这个消息是什么功能的。通过阅读WPF源代码和写测试应用,了解到这是一个完全用来内部测试或调试的消息,没有任何业务上的功能在WPF的HwndWrapper的静态构造......
  • dotnet 读 WPF 源代码笔记 GlyphRun 的 DeviceFontName 的功能是什么
    在WPF里面的GlyphRun里,有一个令人迷惑的DeviceFontName属性,似乎给这个属性传入什么值,结果都不会有变更。通过阅读源代码,可以了解到,这是一个没什么用途的属性。本文将告诉大家这个属性的细节逻辑在上一篇博客WPF简单聊聊如何使用DrawGlyphRun绘制文本里面就提到如何创......
  • Dotnet6 NPOI操作Excel基本操作总结
    背景需要对Excel进行读取和写入,目前使用Dotnet6开发环境,故直接使用。达到的效果:兼容.xls和.xlsx,识别行为空自动跳过,识别显示值,识别格式内容步骤Dotnet6Nuget安装NPOI,具体版本2.6.1,tips:搜索资料时,可能NPOI1与NPOI2可能有出入。使用方法获取相应文档对象......
  • skyapm-dotnet 源码执行
    监听System.Data.SqlClient为例通过观察者模式和DiagnosticListener获取监听数据,在开始InstrumentationHostedService实现IHostedService启动然后通过 DiagnosticListener.AllListeners.Subscribe();监听 然后TracingDiagnosticProcessorObserver:IObserver<Diagno......
  • dotnet SemanticKernel 入门 调用原生本机技能
    本文将告诉大家如何在SemanticKernel里面调用原生本机技能,所谓原生本机技能就是使用C#代码编写的原生本地逻辑技能,这里的技能可讲的可不是游戏角色里面的技能哈,指的是实现某个功能的技能,这是构成AI强大能力的基础本文属于SemanticKernel入门系列博客,更多博客内容请参阅我......
  • dotnet SemanticKernel 入门 将技能导入框架
    在上一篇博客中和大家简单介绍了SemanticKernel里的技能概念,接下来咱准备将技能导入到SemanticKernel框架里面,进行一个管道式调用本文属于SemanticKernel入门系列博客,更多博客内容请参阅我的博客导航别着急,本篇博客还不涉及到任何的GPT相关的魔法,仅仅只是在C#层面......
  • dotnet SemanticKernel 入门 注入日志
    使用SemanticKernel框架在对接AI时,由于使用到了大量的魔法,需要有日志的帮助才好更方便定位问题,本文将告诉大家如何在SemanticKernel注入日志本文属于SemanticKernel入门系列博客,更多博客内容请参阅我的博客导航在KernelBuilder创建器里面可以通过WithLogger注入IL......
  • dotnet SemanticKernel 入门 自定义变量和技能
    本文将告诉大家如何在SemanticKernel框架内定义自定义的变量和如何开发自定义的技能本文属于SemanticKernel入门系列博客,更多博客内容请参阅我的博客导航自定义变量是一个非常有用的技能,自定义变量可以让炼丹师和程序员进行并行工作。由炼丹师对AI模型进行训练,从而找到对......