// 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 implementation that uses a /// that allows you to call await/ContinueWith to get the list of NavigationEntries /// public class TaskNavigationEntryVisitor : INavigationEntryVisitor { private TaskCompletionSource> taskCompletionSource; private List list; /// /// Initializes a new instance of the TaskNavigationEntryVisitor class. /// public TaskNavigationEntryVisitor() { taskCompletionSource = new TaskCompletionSource>(TaskCreationOptions.RunContinuationsAsynchronously); 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) { taskCompletionSource.TrySetResult(list); } list = null; taskCompletionSource = null; } /// /// Task that can be awaited for the result to be retrieved async /// public Task> Task { get { return taskCompletionSource.Task; } } } }