diff --git a/CHANGELOG.md b/CHANGELOG.md
index cd096c3..51a17c9 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -9,6 +9,13 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.
### Changed
- Added GetParentUri method to UriExtensions
+## [14.1.0] - 2021-01-21
+### Added
+ - Added overload to GuidUtils that takes an enumerable of guids and combines them into a new deterministic guid
+
+### Changed
+ - A SafeTimer constructor that executes the callback immediately now does this instead of waiting infinitely
+
## [14.0.0] - 2021-01-14
### Added
- Added Get and Set extensions to PropertyInfo in SIMPLSHARP to mimic overloads avaliable in NETSTANDARD
diff --git a/ICD.Common.Utils/GuidUtils.cs b/ICD.Common.Utils/GuidUtils.cs
index 045c9fa..9edcc31 100644
--- a/ICD.Common.Utils/GuidUtils.cs
+++ b/ICD.Common.Utils/GuidUtils.cs
@@ -1,4 +1,6 @@
using System;
+using System.Collections.Generic;
+using ICD.Common.Utils.Extensions;
namespace ICD.Common.Utils
{
@@ -30,5 +32,13 @@ namespace ICD.Common.Utils
return new Guid(aBytes);
}
+
+ ///
+ /// Combines the guids in the given order to make a new, deterministic guid.
+ ///
+ public static Guid Combine(IEnumerable guids)
+ {
+ return guids.AggregateOrDefault(Combine, default(Guid));
+ }
}
}
diff --git a/ICD.Common.Utils/Properties/AssemblyInfo.cs b/ICD.Common.Utils/Properties/AssemblyInfo.cs
index a8f68e5..8d23892 100644
--- a/ICD.Common.Utils/Properties/AssemblyInfo.cs
+++ b/ICD.Common.Utils/Properties/AssemblyInfo.cs
@@ -4,4 +4,4 @@ using System.Reflection;
[assembly: AssemblyCompany("ICD Systems")]
[assembly: AssemblyProduct("ICD.Common.Utils")]
[assembly: AssemblyCopyright("Copyright © ICD Systems 2021")]
-[assembly: AssemblyVersion("14.0.0.0")]
+[assembly: AssemblyVersion("14.1.0.0")]
diff --git a/ICD.Common.Utils/Services/Scheduler/ActionSchedulerService.cs b/ICD.Common.Utils/Services/Scheduler/ActionSchedulerService.cs
index 868eee1..dd65352 100644
--- a/ICD.Common.Utils/Services/Scheduler/ActionSchedulerService.cs
+++ b/ICD.Common.Utils/Services/Scheduler/ActionSchedulerService.cs
@@ -18,9 +18,9 @@ namespace ICD.Common.Utils.Services.Scheduler
public ActionSchedulerService()
{
m_Actions = new List();
- m_Timer = new SafeTimer(TimerCallback, -1);
m_CriticalSection = new SafeCriticalSection();
m_LastRunTime = DateTime.MinValue;
+ m_Timer = SafeTimer.Stopped(TimerCallback);
}
public void Dispose()
@@ -153,15 +153,6 @@ namespace ICD.Common.Utils.Services.Scheduler
}
}
- private void Log(eSeverity severity, string message, params object[] args)
- {
- ILoggerService logger = ServiceProvider.TryGetService();
- if (logger == null)
- return;
-
- logger.AddEntry(severity, string.Format("{0} - {1}", this, message), args);
- }
-
private void Log(eSeverity severity, Exception ex, string message, params object[] args)
{
ILoggerService logger = ServiceProvider.TryGetService();
diff --git a/ICD.Common.Utils/Timers/SafeTimer.cs b/ICD.Common.Utils/Timers/SafeTimer.cs
index 254b42d..3bc3db2 100644
--- a/ICD.Common.Utils/Timers/SafeTimer.cs
+++ b/ICD.Common.Utils/Timers/SafeTimer.cs
@@ -36,7 +36,7 @@ namespace ICD.Common.Utils.Timers
///
///
public SafeTimer(Action callback, long repeatPeriod)
- : this(callback, -1, repeatPeriod)
+ : this(callback, 0, repeatPeriod)
{
}
@@ -138,7 +138,7 @@ namespace ICD.Common.Utils.Timers
if (repeatPeriod < 0 && repeatPeriod != Timeout.Infinite)
throw new ArgumentOutOfRangeException("repeatPeriod", "Repeat period must be greater than or equal to 0ms");
- if (dueTime >= int.MaxValue)
+ if (repeatPeriod >= int.MaxValue)
throw new ArgumentOutOfRangeException("repeatPeriod", string.Format("Repeat period must be less than {0:n0}ms", int.MaxValue));
#if SIMPLSHARP