private/SynchronousWorker.ps1
|
class SynchronousWorker : Sentry.Extensibility.IBackgroundWorker { hidden [Sentry.Extensibility.ITransport] $transport hidden [Sentry.SentryOptions] $options hidden $unfinishedTasks = [System.Collections.Generic.List[System.Threading.Tasks.Task]]::new() SynchronousWorker([Sentry.SentryOptions] $options) { # No fallback: the SDK builds its own default worker and transport when BackgroundWorker is left unset. if ($null -eq $options.Transport) { throw 'SynchronousWorker requires options.Transport to be set.' } $this.options = $options $this.transport = $options.Transport } [bool] EnqueueEnvelope([Sentry.Protocol.Envelopes.Envelope] $envelope) { $task = $this.transport.SendEnvelopeAsync($envelope, [System.Threading.CancellationToken]::None) if (-not $task.Wait($this.options.FlushTimeout)) { $this.unfinishedTasks.Add($task) } return $true } [System.Threading.Tasks.Task] FlushAsync([System.TimeSpan] $timeout) { [System.Threading.Tasks.Task]::WhenAll($this.unfinishedTasks).Wait($timeout) $this.unfinishedTasks.Clear() return [System.Threading.Tasks.Task]::CompletedTask } [int] get_QueuedItems() { return $this.unfinishedTasks.Count } } |