You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
QfcItemController.InitializeWebViewAsync (QuickFiler/Controllers/QfcItemController.ViewerSetup.cs:48)
returns a Task that three of its four production call sites discard, so any exception it raises becomes an
unobserved task exception rather than a diagnostic anyone sees. The method is the sole entry point for WebView2
environment creation, core initialization, and - at ViewerSetup.cs:112 - the call to EnsureBreadcrumbPipeline().
Issue #488's D5 fix makes that path newly capable of throwing ObjectDisposedException when the pipeline is built
against a viewer whose teardown has begun, which converts a previously silent leak into a fault that is itself
silently swallowed.
Data source or fixture: QuickFiler/Controllers/QfcItemController.Initialization.cs call sites
Steps to Reproduce
Drive a QfcItemController through any of the three fire-and-forget initialization paths listed under
"Suspected Cause / Notes".
Arrange for InitializeWebViewAsync to fault - for example by disposing the ItemViewer before the posted
continuation reaches EnsureBreadcrumbPipeline(), which after Bug: itemviewer-breadcrumb-pipeline-lifecycle #488's D5 fix throws ObjectDisposedException.
Observe that no exception surfaces to the caller, no log entry is written by the call site, and initialization
silently completes as far as any observer can tell.
Expected Behavior
A faulted InitializeWebViewAsync should be observed by its caller - awaited, ContinueWith-observed, or routed to
the repository's logging pattern - so that a failure during WebView2 initialization is diagnosable rather than
invisible.
Actual Behavior
The task is discarded at three of the four call sites, so the fault is never observed:
no - discarded, and additionally wrapped in a WPF DispatcherOperation
QfcItemController.Initialization.cs:256
await InitializeWebViewAsync();
yes - awaited into the enclosing async method's task
QfcItemController.Initialization.cs:288
_ = InitializeWebViewAsync();
no - discarded
QfcItemController.Initialization.cs:324
_ = InitializeWebViewAsync();
no - discarded
On .NET Framework 4.5 and later an unobserved task exception no longer terminates the process by default, so the
fault is finalized away with no observable effect at all.
Logs / Screenshots
Attached minimal logs or screenshot
Snippet: no captured log - that is the defect. Identified by source reading, recorded in docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/d5-faulted-task-observation.md.
Impact / Severity
Blocker
High
Medium
Low
The severity comes from the failure mode rather than the likelihood. A WebView2 initialization failure - a missing
runtime, a locked cache directory, a disposed viewer - produces no diagnostic on three of four paths, so the
breadcrumb surface simply never appears and the cause is unavailable to anyone triaging it.
Summary
QfcItemController.InitializeWebViewAsync(QuickFiler/Controllers/QfcItemController.ViewerSetup.cs:48)returns a
Taskthat three of its four production call sites discard, so any exception it raises becomes anunobserved task exception rather than a diagnostic anyone sees. The method is the sole entry point for WebView2
environment creation, core initialization, and - at
ViewerSetup.cs:112- the call toEnsureBreadcrumbPipeline().Issue #488's D5 fix makes that path newly capable of throwing
ObjectDisposedExceptionwhen the pipeline is builtagainst a viewer whose teardown has begun, which converts a previously silent leak into a fault that is itself
silently swallowed.
Environment
QuickFiler/Controllers/QfcItemController.Initialization.cscall sitesSteps to Reproduce
QfcItemControllerthrough any of the three fire-and-forget initialization paths listed under"Suspected Cause / Notes".
InitializeWebViewAsyncto fault - for example by disposing theItemViewerbefore the postedcontinuation reaches
EnsureBreadcrumbPipeline(), which after Bug: itemviewer-breadcrumb-pipeline-lifecycle #488's D5 fix throwsObjectDisposedException.silently completes as far as any observer can tell.
Expected Behavior
A faulted
InitializeWebViewAsyncshould be observed by its caller - awaited,ContinueWith-observed, or routed tothe repository's logging pattern - so that a failure during WebView2 initialization is diagnosable rather than
invisible.
Actual Behavior
The task is discarded at three of the four call sites, so the fault is never observed:
QfcItemController.Initialization.cs:192_ = _itemViewer.UiDispatcher.InvokeAsync(InitializeWebViewAsync);DispatcherOperationQfcItemController.Initialization.cs:256await InitializeWebViewAsync();QfcItemController.Initialization.cs:288_ = InitializeWebViewAsync();QfcItemController.Initialization.cs:324_ = InitializeWebViewAsync();On .NET Framework 4.5 and later an unobserved task exception no longer terminates the process by default, so the
fault is finalized away with no observable effect at all.
Logs / Screenshots
docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/d5-faulted-task-observation.md.Impact / Severity
The severity comes from the failure mode rather than the likelihood. A WebView2 initialization failure - a missing
runtime, a locked cache directory, a disposed viewer - produces no diagnostic on three of four paths, so the
breadcrumb surface simply never appears and the cause is unavailable to anyone triaging it.
Source
From: docs/features/potential/2026-08-28-qfc-initializewebviewasync-fault-is-unobserved.md