diff --git a/Analytics-CSharp/Segment/Analytics/Analytics.cs b/Analytics-CSharp/Segment/Analytics/Analytics.cs
index 78ec1ab..7c2cb68 100644
--- a/Analytics-CSharp/Segment/Analytics/Analytics.cs
+++ b/Analytics-CSharp/Segment/Analytics/Analytics.cs
@@ -176,9 +176,9 @@ public virtual void Reset()
/// it's not recommended to be used in async method.
///
/// Instance of
- public virtual Settings? Settings()
+ public virtual Settings Settings()
{
- Task task = SettingsAsync();
+ Task task = SettingsAsync();
task.Wait();
return task.Result;
}
@@ -187,20 +187,10 @@ public virtual void Reset()
/// Retrieve the settings.
///
/// Instance of
- public virtual async Task SettingsAsync()
+ public virtual async Task SettingsAsync()
{
- Settings? returnSettings = null;
- IState system = await Store.CurrentState();
-
- // I don't understand this as Store.CurrentState will at worst return a default(TState) which will be a default(System) in this case, hence this cast will always go through?
- // System is a struct, so the default is an empty instance, not null
- // might as well write /* if (true) */
- if (system is System convertedSystem)
- {
- returnSettings = convertedSystem._settings;
- }
-
- return returnSettings;
+ System system = await Store.CurrentState();
+ return system._settings;
}
#endregion
diff --git a/Analytics-CSharp/Segment/Analytics/Timeline.cs b/Analytics-CSharp/Segment/Analytics/Timeline.cs
index 299c265..c2d4dbf 100644
--- a/Analytics-CSharp/Segment/Analytics/Timeline.cs
+++ b/Analytics-CSharp/Segment/Analytics/Timeline.cs
@@ -160,26 +160,22 @@ internal void Add(Plugin plugin)
Analytics analytics = plugin.Analytics;
analytics.AnalyticsScope.Launch(analytics.AnalyticsDispatcher, async () =>
{
- Settings? settings = await plugin.Analytics.SettingsAsync();
-
- // This is basically never null, look at the comment in SettingsAsync
- if (settings == null)
- {
- return;
- }
-
+ Settings settings = await plugin.Analytics.SettingsAsync();
// Fetch system afterwards for a minuscule but cool performance gain
System system = await analytics.Store.CurrentState();
+ // Don't initialize unless we have updated settings from the web.
+ // CheckSettings will initialize everything added before then, so wait until other inits have happened.
// Check for nullability because CurrentState returns default(IState) which could make the .Count throw a NullReferenceException
if (system._initializedPlugins != null && system._initializedPlugins.Count > 0)
{
await analytics.Store.Dispatch(new System.AddInitializedPluginAction(new HashSet{plugin.GetHashCode()}));
- plugin.Update(settings.Value, UpdateType.Initial);
+ plugin.Update(settings, UpdateType.Initial);
}
});
}
+
internal void Remove(Plugin plugin) => _plugins.RemoveAll(tempPlugin => tempPlugin == plugin);
internal RawEvent Execute(RawEvent incomingEvent)