Skip to content

Commit 44956cc

Browse files
ggeurtskblok
authored andcommitted
Prevent unhandled task exceptions (#950)
* Prevent unhandled task exceptions * Remove double blank line
1 parent 2e7961c commit 44956cc

File tree

2 files changed

+21
-15
lines changed

2 files changed

+21
-15
lines changed

lib/PuppeteerSharp/Page.cs

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -79,11 +79,18 @@ private Page(
7979
_ignoreHTTPSErrors = ignoreHTTPSErrors;
8080

8181
_screenshotTaskQueue = screenshotTaskQueue;
82-
target.CloseTask.ContinueWith((arg) =>
82+
83+
_ = target.CloseTask.ContinueWith((arg) =>
8384
{
84-
Close?.Invoke(this, EventArgs.Empty);
85-
IsClosed = true;
86-
_closeCompletedTcs.TrySetResult(true);
85+
try
86+
{
87+
Close?.Invoke(this, EventArgs.Empty);
88+
}
89+
finally
90+
{
91+
IsClosed = true;
92+
_closeCompletedTcs.TrySetResult(true);
93+
}
8794
});
8895

8996
Client.MessageReceived += Client_MessageReceived;
@@ -1104,7 +1111,7 @@ public Task CloseAsync(PageCloseOptions options = null)
11041111
return Client.Connection.SendAsync("Target.closeTarget", new TargetCloseTargetRequest
11051112
{
11061113
TargetId = Target.TargetId
1107-
}).ContinueWith((task) => Target.CloseTask);
1114+
}).ContinueWith(task => Target.CloseTask);
11081115
}
11091116
}
11101117

lib/PuppeteerSharp/Target.cs

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,8 @@ public class Target
1313
{
1414
#region Private members
1515
private TargetInfo _targetInfo;
16-
private readonly string _targetId;
1716
private readonly Func<TargetInfo, Task<CDPSession>> _sessionFactory;
17+
private readonly TaskCompletionSource<bool> _initializedTaskWrapper = new TaskCompletionSource<bool>(TaskCreationOptions.RunContinuationsAsynchronously);
1818
#endregion
1919

2020
internal bool IsInitialized;
@@ -25,24 +25,24 @@ internal Target(
2525
BrowserContext browserContext)
2626
{
2727
_targetInfo = targetInfo;
28-
_targetId = targetInfo.TargetId;
2928
_sessionFactory = sessionFactory;
3029
BrowserContext = browserContext;
3130
PageTask = null;
3231

33-
InitilizedTaskWrapper = new TaskCompletionSource<bool>(TaskCreationOptions.RunContinuationsAsynchronously);
34-
InitilizedTaskWrapper.Task.ContinueWith(async initializedTask =>
32+
_ = _initializedTaskWrapper.Task.ContinueWith(async initializedTask =>
3533
{
3634
var success = initializedTask.Result;
3735
if (!success)
3836
{
3937
return;
4038
}
41-
if (Opener == null || Opener.PageTask == null || Type != TargetType.Page)
39+
40+
var openerPageTask = Opener?.PageTask;
41+
if (openerPageTask == null || Type != TargetType.Page)
4242
{
4343
return;
4444
}
45-
var openerPage = await Opener.PageTask.ConfigureAwait(false);
45+
var openerPage = await openerPageTask.ConfigureAwait(false);
4646
if (!openerPage.HasPopupEventListeners)
4747
{
4848
return;
@@ -56,7 +56,7 @@ internal Target(
5656

5757
if (IsInitialized)
5858
{
59-
InitilizedTaskWrapper.TrySetResult(true);
59+
_initializedTaskWrapper.TrySetResult(true);
6060
}
6161
}
6262

@@ -97,8 +97,7 @@ internal Target(
9797
/// </summary>
9898
public BrowserContext BrowserContext { get; }
9999

100-
internal Task<bool> InitializedTask => InitilizedTaskWrapper.Task;
101-
internal TaskCompletionSource<bool> InitilizedTaskWrapper { get; }
100+
internal Task<bool> InitializedTask => _initializedTaskWrapper.Task;
102101
internal Task CloseTask => CloseTaskWrapper.Task;
103102
internal TaskCompletionSource<bool> CloseTaskWrapper { get; }
104103
internal Task<Page> PageTask { get; set; }
@@ -132,7 +131,7 @@ internal void TargetInfoChanged(TargetInfo targetInfo)
132131
if (!IsInitialized && (_targetInfo.Type != TargetType.Page || _targetInfo.Url != string.Empty))
133132
{
134133
IsInitialized = true;
135-
InitilizedTaskWrapper.TrySetResult(true);
134+
_initializedTaskWrapper.TrySetResult(true);
136135
return;
137136
}
138137

0 commit comments

Comments
 (0)