【发布时间】:2013-10-05 06:42:13
【问题描述】:
我希望有一个File.ExistsAsync()
我有:
bool exists = await Task.Run(() => File.Exists(fileName));
为此使用线程感觉像是一种反模式。 有没有更清洁的方法?
【问题讨论】:
-
我能问一下为什么需要一个线程吗?
-
嗯,我不想要一个线程,但我也不想阻塞。
-
File.Exists 真的会阻塞吗?
-
使用
File.Exists()是一种自动竞争条件。它可以返回true,同时另一个线程刚刚删除了它。只是说。 -
@MatthewWatson 同步版本还引入了竞态条件;另一个线程(或者更有可能是另一个进程)可能刚刚删除了它。尽管如此,
File.Exists可能需要几分钟才能完成(例如,机器不存在、连接可能很慢或无法读取磁盘),因此使用 I/O 完成端口的File.ExistsAsync是最合适的欢迎。不幸的是,内部GetFileAttributesEx调用似乎不能重叠,所以没有什么意义。
标签: c# async-await file-exists