Ошибка в асинхронном запросе

202
27 октября 2017, 10:25

Пытаюсь получить текущего работающего пользователя, через WMI. Но происходит не понятная мне ошибка. Метод не должен возвращать null, но он это делает.

вот сам метод

public static async Task<object> GetCurrentUser(object ipAddress)
{
    return await Task.Run(() =>
    {
        try
        {
            ManagementScope scope = new ManagementScope("\\\\" + ipAddress + "\\root\\cimv2");
            scope.Connect();
            ObjectQuery query = new ObjectQuery("SELECT username FROM Win32_ComputerSystem");
            ManagementObjectSearcher searcher = new ManagementObjectSearcher(scope, query);
            ManagementObjectCollection queryCollection = searcher.Get();
            foreach (ManagementObject m in queryCollection)
            {
                return m["username"];
            }
            return "0";
        }
        catch (Exception)
        {
            return "0";
        }

    });
}

Ошибка возникает следующая

Вот как я вызываю этот метод.

Parallel.ForEach(ping_success_ips, opts, ip =>
{
    Computer computer = new Computer
    {
        Status = true,
        Os = WMI.GetOs(ip).GetAwaiter().GetResult().ToString(),
        Mac = WMI.GetMacAddress(ip),
        IP = ip,
        Hostname = WMI.GetHostName(ip).GetAwaiter().GetResult().ToString(),
        ONTime = DateTime.Now
    };
    User user = new User
    {
        ComputerId = computer.Id,
        Username = WMI.GetCurrentUser(ip).GetAwaiter().GetResult().ToString(),
        Ontime = DateTime.Now
    };
    lock (computer)
    {
        lock (user)
        {
            using (var appContext = new LanScannerModel())
            {
                appContext.Computers.Add(computer);
                appContext.Users.Add(user);
                appContext.SaveChanges();
            }
        }
    }
    Console.WriteLine(computer.IP + "   "+ computer.Mac + " " + computer.Os + " " + computer.Hostname);
});

Возможно это происходит из-за асинхронности метода и он не успевает выполнить запрос и возвращает null. Не могу понять, почему это происходит?

READ ALSO
Заполнение SubReport из List

Заполнение SubReport из List

Необходимо вывести из данные из List в таблицу, которая находится во вложенном отчетеОднако при привязки List к DataSource вложенного отчета , выводится...

221
Создание подключения к Oracle

Создание подключения к Oracle

Есть проблема с созданием подключения к OracleСоздаётся переменная:

259
Каверзный Jquery $.load (или $.get)

Каверзный Jquery $.load (или $.get)

При загрузки контента со сторонней страницы обнаружил такую проблемуОн загружает первый генерируемый код HTML не дожидаясь загрузки скриптов...

234
Масштабирование canvas

Масштабирование canvas

Создаю небольшой графический редактор на jsИспользую библиотеку fabric

288