C # асинхронная задача не запускается на Directory.Exists - PullRequest
0 голосов
/ 09 января 2019

У меня в настоящее время есть некоторые проблемы с интранетом, и некоторые сетевые драйверы обычно начинают зависать через некоторое время

Я сделал следующий код для проверки асинхронности, если данный путь доступен или нет, но теперь, похоже, возникла новая проблема. Иногда задача вообще не запускается, и на перерыве она говорит, что ее очередь на запуск. Это происходит только на нескольких машинах, а не на всех, поэтому путаница

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 задачи, так что это не будет случай перенаселения задач

...