diff --git a/dotnet/src/webdriver/DevTools/DevToolsSession.cs b/dotnet/src/webdriver/DevTools/DevToolsSession.cs
index 27358159dff5a..2223517de4a2d 100644
--- a/dotnet/src/webdriver/DevTools/DevToolsSession.cs
+++ b/dotnet/src/webdriver/DevTools/DevToolsSession.cs
@@ -429,11 +429,11 @@ private async Task InitializeSession()
this.domains.Target.TargetDetached += this.OnTargetDetached;
}
- private async void OnTargetDetached(object sender, TargetDetachedEventArgs e)
+ private void OnTargetDetached(object sender, TargetDetachedEventArgs e)
{
if (e.SessionId == this.ActiveSessionId && e.TargetId == this.attachedTargetId)
{
- await this.StopSession(false);
+ Task.Run(async () => await this.StopSession(false)).GetAwaiter().GetResult();
}
}
@@ -524,7 +524,10 @@ private async Task ReceiveMessage()
using (var reader = new StreamReader(stream, Encoding.UTF8))
{
string message = reader.ReadToEnd();
- ProcessIncomingMessage(message);
+
+ // fire and forget
+ // TODO: we need implement some kind of queue
+ Task.Run(() => ProcessIncomingMessage(message));
}
}
}
@@ -583,8 +586,7 @@ private void ProcessIncomingMessage(string message)
LogTrace("Recieved Event {0}: {1}", method, eventData.ToString());
- // fire and forget
- Task.Run(() => OnDevToolsEventReceived(new DevToolsEventReceivedEventArgs(methodParts[0], methodParts[1], eventData)));
+ OnDevToolsEventReceived(new DevToolsEventReceivedEventArgs(methodParts[0], methodParts[1], eventData));
return;
}
diff --git a/dotnet/src/webdriver/DevTools/Network.cs b/dotnet/src/webdriver/DevTools/Network.cs
index 76603b2f38b1b..22ff81d2b21a6 100644
--- a/dotnet/src/webdriver/DevTools/Network.cs
+++ b/dotnet/src/webdriver/DevTools/Network.cs
@@ -16,7 +16,7 @@
// limitations under the License.
//
-using System;
+using System.Linq;
using System.Threading.Tasks;
namespace OpenQA.Selenium.DevTools
@@ -29,17 +29,17 @@ public abstract class Network
///
/// Occurs when a network request requires authorization.
///
- public event EventHandler AuthRequired;
+ public event AsyncEventHandler AuthRequired;
///
/// Occurs when a network request is intercepted.
///
- public event EventHandler RequestPaused;
+ public event AsyncEventHandler RequestPaused;
///
/// Occurs when a network response is received.
///
- public event EventHandler ResponsePaused;
+ public event AsyncEventHandler ResponsePaused;
///
/// Asynchronously disables network caching.
@@ -152,9 +152,14 @@ public async Task SetUserAgentOverride(string userAgent)
/// An that contains the event data.
protected virtual void OnAuthRequired(AuthRequiredEventArgs e)
{
- if (this.AuthRequired != null)
+ var delegates = AuthRequired?.GetInvocationList();
+
+ if (delegates != null)
{
- this.AuthRequired(this, e);
+ foreach (var d in delegates.Cast>())
+ {
+ Task.Run(async () => await d.Invoke(this, e)).GetAwaiter().GetResult();
+ }
}
}
@@ -164,9 +169,14 @@ protected virtual void OnAuthRequired(AuthRequiredEventArgs e)
/// An that contains the event data.
protected virtual void OnRequestPaused(RequestPausedEventArgs e)
{
- if (this.RequestPaused != null)
+ var delegates = RequestPaused?.GetInvocationList();
+
+ if (delegates != null)
{
- this.RequestPaused(this, e);
+ foreach (var d in delegates.Cast>())
+ {
+ Task.Run(async () => await d.Invoke(this, e)).GetAwaiter().GetResult();
+ }
}
}
@@ -176,10 +186,17 @@ protected virtual void OnRequestPaused(RequestPausedEventArgs e)
/// An that contains the event data.
protected virtual void OnResponsePaused(ResponsePausedEventArgs e)
{
- if (this.ResponsePaused != null)
+ var delegates = ResponsePaused?.GetInvocationList();
+
+ if (delegates != null)
{
- this.ResponsePaused(this, e);
+ foreach (var d in delegates.Cast>())
+ {
+ Task.Run(async () => await d.Invoke(this, e)).GetAwaiter().GetResult();
+ }
}
}
+
+ public delegate Task AsyncEventHandler(object sender, TEventArgs e);
}
}
diff --git a/dotnet/src/webdriver/NetworkManager.cs b/dotnet/src/webdriver/NetworkManager.cs
index dbea1611457c1..7bce452bcb4af 100644
--- a/dotnet/src/webdriver/NetworkManager.cs
+++ b/dotnet/src/webdriver/NetworkManager.cs
@@ -190,7 +190,7 @@ public void ClearResponseHandlers()
this.responseHandlers.Clear();
}
- private async void OnAuthRequired(object sender, AuthRequiredEventArgs e)
+ private async Task OnAuthRequired(object sender, AuthRequiredEventArgs e)
{
string requestId = e.RequestId;
Uri uri = new Uri(e.Uri);
@@ -212,7 +212,7 @@ private async void OnAuthRequired(object sender, AuthRequiredEventArgs e)
}
}
- private async void OnRequestPaused(object sender, RequestPausedEventArgs e)
+ private async Task OnRequestPaused(object sender, RequestPausedEventArgs e)
{
if (this.NetworkRequestSent != null)
{
@@ -240,7 +240,7 @@ private async void OnRequestPaused(object sender, RequestPausedEventArgs e)
await this.session.Value.Domains.Network.ContinueRequestWithoutModification(e.RequestData);
}
- private async void OnResponsePaused(object sender, ResponsePausedEventArgs e)
+ private async Task OnResponsePaused(object sender, ResponsePausedEventArgs e)
{
if (e.ResponseData.Headers.Count > 0)
{