如何使以下代码异步运行,而不必在线程池上创建额外的线程(换句话说,不用 Task.Run(...)
)?
Directory.CreateDirectory("\\host\someNetworkDirectory");
Run Code Online (Sandbox Code Playgroud)
理想情况下,我想这样使用它:
async SomeMethod(){
//...
await Directory.CreateDirectoryAsync("\\host\someNetworkDirectory");
// stuff to do after ensuring the directory exists
//...
}
Run Code Online (Sandbox Code Playgroud)
我尝试了此答案(建议使用FileSystemWatcher
),但不适用于文件夹。
在操作系统层面,这个函数是严格同步的。WinAPI 只有两个创建目录的函数,CreateDirectory
和CreateDirectoryEx
. 它们都不接受回调。
因此,您无法避免必须创建线程来实现异步。您所能希望的最好的方法是找到一个可以将其隐藏起来的图书馆。
查看静态 Task.Run 方法。
async SomeMethod() {
//...
await Task.Run(() => Directory.CreateDirectory("\\host\someNetworkDirectory"));
//...
}
Run Code Online (Sandbox Code Playgroud)