Skip to content

Commit 074e7c8

Browse files
authored
[dotnet] Avoid async void events in CDP Network session (#12486)
1 parent d6dc04c commit 074e7c8

File tree

3 files changed

+37
-18
lines changed

3 files changed

+37
-18
lines changed

dotnet/src/webdriver/DevTools/DevToolsSession.cs

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -429,11 +429,11 @@ private async Task InitializeSession()
429429
this.domains.Target.TargetDetached += this.OnTargetDetached;
430430
}
431431

432-
private async void OnTargetDetached(object sender, TargetDetachedEventArgs e)
432+
private void OnTargetDetached(object sender, TargetDetachedEventArgs e)
433433
{
434434
if (e.SessionId == this.ActiveSessionId && e.TargetId == this.attachedTargetId)
435435
{
436-
await this.StopSession(false);
436+
Task.Run(async () => await this.StopSession(false)).GetAwaiter().GetResult();
437437
}
438438
}
439439

@@ -524,7 +524,10 @@ private async Task ReceiveMessage()
524524
using (var reader = new StreamReader(stream, Encoding.UTF8))
525525
{
526526
string message = reader.ReadToEnd();
527-
ProcessIncomingMessage(message);
527+
528+
// fire and forget
529+
// TODO: we need implement some kind of queue
530+
Task.Run(() => ProcessIncomingMessage(message));
528531
}
529532
}
530533
}
@@ -583,8 +586,7 @@ private void ProcessIncomingMessage(string message)
583586

584587
LogTrace("Recieved Event {0}: {1}", method, eventData.ToString());
585588

586-
// fire and forget
587-
Task.Run(() => OnDevToolsEventReceived(new DevToolsEventReceivedEventArgs(methodParts[0], methodParts[1], eventData)));
589+
OnDevToolsEventReceived(new DevToolsEventReceivedEventArgs(methodParts[0], methodParts[1], eventData));
588590

589591
return;
590592
}

dotnet/src/webdriver/DevTools/Network.cs

Lines changed: 27 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
// limitations under the License.
1717
// </copyright>
1818

19-
using System;
19+
using System.Linq;
2020
using System.Threading.Tasks;
2121

2222
namespace OpenQA.Selenium.DevTools
@@ -29,17 +29,17 @@ public abstract class Network
2929
/// <summary>
3030
/// Occurs when a network request requires authorization.
3131
/// </summary>
32-
public event EventHandler<AuthRequiredEventArgs> AuthRequired;
32+
public event AsyncEventHandler<AuthRequiredEventArgs> AuthRequired;
3333

3434
/// <summary>
3535
/// Occurs when a network request is intercepted.
3636
/// </summary>
37-
public event EventHandler<RequestPausedEventArgs> RequestPaused;
37+
public event AsyncEventHandler<RequestPausedEventArgs> RequestPaused;
3838

3939
/// <summary>
4040
/// Occurs when a network response is received.
4141
/// </summary>
42-
public event EventHandler<ResponsePausedEventArgs> ResponsePaused;
42+
public event AsyncEventHandler<ResponsePausedEventArgs> ResponsePaused;
4343

4444
/// <summary>
4545
/// Asynchronously disables network caching.
@@ -152,9 +152,14 @@ public async Task SetUserAgentOverride(string userAgent)
152152
/// <param name="e">An <see cref="AuthRequiredEventArgs"/> that contains the event data.</param>
153153
protected virtual void OnAuthRequired(AuthRequiredEventArgs e)
154154
{
155-
if (this.AuthRequired != null)
155+
var delegates = AuthRequired?.GetInvocationList();
156+
157+
if (delegates != null)
156158
{
157-
this.AuthRequired(this, e);
159+
foreach (var d in delegates.Cast<AsyncEventHandler<AuthRequiredEventArgs>>())
160+
{
161+
Task.Run(async () => await d.Invoke(this, e)).GetAwaiter().GetResult();
162+
}
158163
}
159164
}
160165

@@ -164,9 +169,14 @@ protected virtual void OnAuthRequired(AuthRequiredEventArgs e)
164169
/// <param name="e">An <see cref="RequestPausedEventArgs"/> that contains the event data.</param>
165170
protected virtual void OnRequestPaused(RequestPausedEventArgs e)
166171
{
167-
if (this.RequestPaused != null)
172+
var delegates = RequestPaused?.GetInvocationList();
173+
174+
if (delegates != null)
168175
{
169-
this.RequestPaused(this, e);
176+
foreach (var d in delegates.Cast<AsyncEventHandler<RequestPausedEventArgs>>())
177+
{
178+
Task.Run(async () => await d.Invoke(this, e)).GetAwaiter().GetResult();
179+
}
170180
}
171181
}
172182

@@ -176,10 +186,17 @@ protected virtual void OnRequestPaused(RequestPausedEventArgs e)
176186
/// <param name="e">An <see cref="ResponsePausedEventArgs"/> that contains the event data.</param>
177187
protected virtual void OnResponsePaused(ResponsePausedEventArgs e)
178188
{
179-
if (this.ResponsePaused != null)
189+
var delegates = ResponsePaused?.GetInvocationList();
190+
191+
if (delegates != null)
180192
{
181-
this.ResponsePaused(this, e);
193+
foreach (var d in delegates.Cast<AsyncEventHandler<ResponsePausedEventArgs>>())
194+
{
195+
Task.Run(async () => await d.Invoke(this, e)).GetAwaiter().GetResult();
196+
}
182197
}
183198
}
199+
200+
public delegate Task AsyncEventHandler<TEventArgs>(object sender, TEventArgs e);
184201
}
185202
}

dotnet/src/webdriver/NetworkManager.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -190,7 +190,7 @@ public void ClearResponseHandlers()
190190
this.responseHandlers.Clear();
191191
}
192192

193-
private async void OnAuthRequired(object sender, AuthRequiredEventArgs e)
193+
private async Task OnAuthRequired(object sender, AuthRequiredEventArgs e)
194194
{
195195
string requestId = e.RequestId;
196196
Uri uri = new Uri(e.Uri);
@@ -212,7 +212,7 @@ private async void OnAuthRequired(object sender, AuthRequiredEventArgs e)
212212
}
213213
}
214214

215-
private async void OnRequestPaused(object sender, RequestPausedEventArgs e)
215+
private async Task OnRequestPaused(object sender, RequestPausedEventArgs e)
216216
{
217217
if (this.NetworkRequestSent != null)
218218
{
@@ -240,7 +240,7 @@ private async void OnRequestPaused(object sender, RequestPausedEventArgs e)
240240
await this.session.Value.Domains.Network.ContinueRequestWithoutModification(e.RequestData);
241241
}
242242

243-
private async void OnResponsePaused(object sender, ResponsePausedEventArgs e)
243+
private async Task OnResponsePaused(object sender, ResponsePausedEventArgs e)
244244
{
245245
if (e.ResponseData.Headers.Count > 0)
246246
{

0 commit comments

Comments
 (0)