public void Handle(BrokeredMessage brokeredMessage, QueueClient queue) { var message = brokeredMessage.GetBody <GoToUrlMessage>(); var browser = _sessions.GetOrAdd(message.SessionId, new OffscreenBrowser()); while (browser.GetBrowser() == null) { Thread.Sleep(50); } browser.GetBrowser().GetMainFrame().LoadUrl(message.Url); var loaded = WaitForBrowserLoadingAsync(browser).Result; if (!loaded) { return; } var visitor = new SourceVisitor(s => { Console.Write(s); var fileName = $"{message.SessionId}-{Guid.NewGuid()}"; _storage.CreateOrUpdate(fileName, s); var reply = new ContentReadyMessage() { SessionId = message.SessionId, FileName = fileName }; queue.Send(reply.ToBrokeredMessage()); CompletedEvent.Set(); }); browser.GetBrowser().GetMainFrame().GetSource(visitor); CompletedEvent.WaitOne(); }