private static async Task LogLineAsync(string line, LogLevels level = LogLevels.Debug) { if (!Enabled) { return; } if (!_initialized) { await Initialize(); } if (_debuggerAttached) { Debug.WriteLine(line); } //don't write if not meeting minimum log level if (_currentLevel > level) { return; } if (!await threadblock.WaitAsync(100)) { lock ( _deferredEntries ) { _deferredEntries.Add(line); } return; } try { List <string> list = null; lock ( _deferredEntries ) { if (_deferredEntries.Count > 0) { list = _deferredEntries.ToList(); _deferredEntries.Clear(); } } if (list != null) { foreach (var l in list) { await AppStorage.AppendToFileAsync(_logFile, l); } } await AppStorage.AppendToFileAsync(_logFile, line); } catch (Exception e) { throw new OperationCanceledException("Logging failed", e); } finally { threadblock.Release(); } }