У меня в настоящее время есть некоторые проблемы с интранетом, и некоторые сетевые драйверы обычно начинают зависать через некоторое время
Я сделал следующий код для проверки асинхронности, если данный путь доступен или нет, но теперь, похоже, возникла новая проблема.
Иногда задача вообще не запускается, и на перерыве она говорит, что ее очередь на запуск. Это происходит только на нескольких машинах, а не на всех, поэтому путаница
public static class PingHelper
{
private static Task RealTask { get; set; }
public static bool IsAvailable { get; set; }
public static async Task Check(string location, int timeout)
{
if (RealTask == null)
{
DirectoryInfo directoryInfo = new DirectoryInfo(location);
RealTask = Task.Run(() =>
{
var result = directoryInfo.Exists;
});
Task dummyTask = Task.Delay(timeout);
if (dummyTask != await Task.WhenAny(RealTask, dummyTask))
{
RealTask = null;
IsAvailable = true;
}
return;
}
if (RealTask.IsCompleted)
{
RealTask = null;
}
IsAvailable = false;
}
}
Код должен создавать задачу, проверять через x миллисекунд, успешно ли она вернулась или нет, а также, если задача уже существует, зависание в Directory.Exists, просто предположить, что она все еще висит, и немедленно вернуть false.
Так что, в принципе, я не уверен, что является основной причиной проблемы, ThreadPool установлен на 1024, и во время перерыва выполняются только 3 задачи, так что это не будет случай перенаселения задач