В моем корпоративном приложении мне нужно проверять наличие файла (в основном по сети) каждые 800 мс. Текущий метод, который отлично работает, это:
private delegate bool FileExistsDelegate(string file);
public static bool FileExists(string path, int timeout = 2000)
{
bool retValue = false;
try
{
FileExistsDelegate callback = new FileExistsDelegate(File.Exists);
IAsyncResult result = callback.BeginInvoke(path, null, null);
if (result.AsyncWaitHandle.WaitOne(timeout, false))
return callback.EndInvoke(result);
return false;
}
catch
{
return false;
}
}
Проблема в том, что пользовательский интерфейс замораживается, если путь не найден, поэтому я переписал его, используя Задание как:
public static bool FileExists(string path, int timeout = 2000)
{
Func<bool> func = () => File.Exists(path);
Task<bool> task = new Task<bool>(func);
task.Start();
if (task.Wait(timeout))
{
return true;
}
return false;
}
Проблема в том, что моя задача не ждет, как ожидалось, кажется, что тайм-аут не используется. Правильный ли этот подход в использовании Task / Wait? Формат файла выглядит как "\\ 10.100.100.1 \ status.txt"