// 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; }
}
}
}