// Copyright © 2021 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.Threading.Tasks; namespace CefSharp.Internals { public static class GlobalContextInitialized { private static TaskCompletionSource TaskCompletionSource = new TaskCompletionSource(); public static Task Task { get { return TaskCompletionSource.Task; } } public static void SetResult(bool success) { TaskCompletionSource.TrySetResult(success); } public static void SetException(Exception ex) { TaskCompletionSource.TrySetException(ex); } /// /// We need to be sure the CEF Global Context has been initialized before /// we create the browser. If the CefRequestContext has already been initialzed /// then we'll execute syncroniously. If the CefRequestContext hasn't been /// initialized then we will continue on the CEF UI Thread. /// https://github.com/cefsharp/CefSharp/issues/3850 /// /// action to invoke public static void ExecuteOrEnqueue(Action action) { TaskCompletionSource.Task.ContinueWith((t) => { action(t.Result); }, TaskContinuationOptions.ExecuteSynchronously); } } }