private async Task <object> TryMapObjectAsync(ManagementBaseObject managementBaseObject, Type propertyType) { var tasks = new List <Task>(); var objectInstance = Activator.CreateInstance(propertyType); var objectInstanceName = objectInstance?.GetType().Name; if (objectInstance != null) { foreach (var propertyInfo in objectInstance.GetType().GetProperties()) { tasks.Add(Task.Run(() => { try { var propertyData = managementBaseObject?.Properties[propertyInfo.Name]; if (!(propertyData is null)) { TrySetValue(objectInstance, propertyInfo, propertyData); LogEventHandler.Information($"{EndPoint}: {objectInstanceName}: {propertyInfo.Name}: {propertyData.Value}"); } } catch (ManagementException exception) { if (exception.ErrorCode != ManagementStatus.NotFound) { var wmiException = new WMIGeneralException(EndPoint, exception); LogEventHandler.Exception(wmiException); } } catch (Exception exception) { var wmiException = new WMIGeneralException(EndPoint, exception); LogEventHandler.Exception(wmiException); } })); } } await Task.WhenAll(tasks).ConfigureAwait(false); return(objectInstance); }