C#异步任务未在Directory.Exists上启动

时间:2019-01-09 11:05:46

标签: c# asynchronous directory task intranet

我目前在Intranet上遇到一些问题,并且某些网络驱动程序通常在一段时间后开始挂起

我执行了以下代码,以便检查给定路径是否可以访问异步,但是现在似乎出现了新问题。 有时,该任务根本无法启动,并且在中断时表示已排队等待启动。这种情况仅在很少的机器上发生,而不是在所有机器上发生,所以这就是为什么

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上挂起了一个任务,如果存在,只需假设其仍然挂起并立即返回false即可。

所以基本上我不确定问题的根本原因是什么,ThreadPool设置为1024,并且在中断期间只有3个任务正在运行,所以不会出现任务过多的情况

0 个答案:

没有答案