Мое приложение в настоящее время выполняет Adobe Illustrator с некоторой командой. Ожидает, когда файл результатов появится в какой-то конкретной папке (с асинхронной функцией), и что-то делает с файлом, когда он будет готов.
Но проблема в том, что иногда Adobe Illustrator дает сбой, и приложение продолжает ждать. В таких случаях я не могу понять, как я могу применить механизм тайм-аута, чтобы убить Adobe Illustrator и пропустить текущий процесс.
Вот код:
...
await WhenFileCreated(result_file_name);
if (File.Exists(result_file_name))
{
...
public static Task WhenFileCreated(string path)
{
if (File.Exists(path))
return Task.FromResult(true);
var tcs = new TaskCompletionSource<bool>();
FileSystemWatcher watcher = new FileSystemWatcher(Path.GetDirectoryName(path));
FileSystemEventHandler createdHandler = null;
RenamedEventHandler renamedHandler = null;
createdHandler = (s, e) =>
{
if (e.Name == Path.GetFileName(path))
{
tcs.TrySetResult(true);
watcher.Created -= createdHandler;
watcher.Dispose();
}
};
renamedHandler = (s, e) =>
{
if (e.Name == Path.GetFileName(path))
{
tcs.TrySetResult(true);
watcher.Renamed -= renamedHandler;
watcher.Dispose();
}
};
watcher.Created += createdHandler;
watcher.Renamed += renamedHandler;
watcher.EnableRaisingEvents = true;
return tcs.Task;
}
Как применить тайм-аут к этому? Есть предложения?