// Copyright © 2016 The CefSharp Authors. All rights reserved. // // Use of this source code is governed by a BSD-style license that can be found in the LICENSE file. using System; using System.Collections.Generic; using System.Threading.Tasks; using CefSharp.Internals; namespace CefSharp { /// /// A that uses a TaskCompletionSource /// to simplify things /// public class TaskNavigationEntryVisitor : INavigationEntryVisitor { private TaskCompletionSource> taskCompletionSource; private List list; /// /// Default constructor /// public TaskNavigationEntryVisitor() { taskCompletionSource = new TaskCompletionSource>(); list = new List(); } bool INavigationEntryVisitor.Visit(NavigationEntry entry, bool current, int index, int total) { list.Add(entry); return true; } void IDisposable.Dispose() { if (list != null) { //Set the result on the ThreadPool so the Task continuation is not run on the CEF UI Thread taskCompletionSource.TrySetResultAsync(list); } list = null; taskCompletionSource = null; } /// /// Task that can be awaited for the result to be retrieved async /// public Task> Task { get { return taskCompletionSource.Task; } } } }