public static JobObject Enable(this JobObject job, IsolationLimits limits, Action <string, object> onSet = null) { if (job == null) { throw new ArgumentNullException(nameof(job)); } if (limits == null) { throw new ArgumentNullException(nameof(limits)); } job.Update(o => { if (limits.MaxMemory > 0) { o.ProcessMemoryLimit = limits.MaxMemory; onSet?.Invoke(nameof(IsolationLimits.MaxMemory), limits.MaxMemory); } if (limits.MaxCpuUsage > 0) { o.CpuRateLimit = limits.MaxCpuUsage; onSet?.Invoke(nameof(IsolationLimits.MaxCpuUsage), limits.MaxCpuUsage); } if (limits.AffinityMask != IntPtr.Zero) { o.ProcessorAffinity = limits.AffinityMask; onSet?.Invoke(nameof(IsolationLimits.AffinityMask), limits.AffinityMask); } }); return(job); }