await
外部アプリケーションによってファイルを作成するための最もクリーンな方法は何ですか?
async Task doSomethingWithFile(string filepath)
{
// 1. await for path exists
// 2. Do something with file
}
await
外部アプリケーションによってファイルを作成するための最もクリーンな方法は何ですか?
async Task doSomethingWithFile(string filepath)
{
// 1. await for path exists
// 2. Do something with file
}
これは私がそれを行う方法です:
await Task.Run(() => {while(!File.Exists(@"yourpath.extension")){} return;});
//do all the processing
メソッドにパッケージ化することもできます。
public static Task WaitForFileAsync(string path)
{
if (File.Exists(path)) return Task.FromResult<object>(null);
var tcs = new TaskCompletionSource<object>();
FileSystemWatcher watcher = new FileSystemWatcher(Path.GetDirectoryName(path));
watcher.Created += (s, e) =>
{
if (e.FullPath.Equals(path))
{
tcs.TrySetResult(null);
if (watcher != null)
{
watcher.EnableRaisingEvents = false;
watcher.Dispose();
}
}
};
watcher.Renamed += (s, e) =>
{
if (e.FullPath.Equals(path))
{
tcs.TrySetResult(null);
if (watcher != null)
{
watcher.EnableRaisingEvents = false;
watcher.Dispose();
}
}
};
watcher.EnableRaisingEvents = true;
return tcs.Task;
}
そして、これを次のように使用します。
await WaitForFileAsync("yourpath.extension");
//do all the processing