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